gpt4 book ai didi

c++ - VC++ 6.0 从 COM DLL 生成的 .TLH 结果出错

转载 作者:行者123 更新时间:2023-11-30 04:28:52 24 4
gpt4 key购买 nike

问题是,我有一个在 C#.NET 中创建的 DLL 和 TLB,使它在 COM 中可见,并想将这些函数公开给我的 MFC C++ 项目——我首先制作了一个测试类,它工作正常,但没有不会从 C++ 生成的 tlh 中得到任何错误。现在我想使用的实际 DLL 给我以下编译错误:

error C2059: syntax error : '<'
error C2238: unexpected token(s) preceding ';'
error C2059: syntax error : '<'
error C2238: unexpected token(s) preceding ';'
error C2059: syntax error : '<'
error C2238: unexpected token(s) preceding ';'

从以下 C++ 生成的 tlh 文件:

//
// Type library items
//

struct __declspec(uuid("d6b19eb0-56bf-3c30-9f3a-ebafca303996"))
Class1;
// [ default ] interface _Class1
// interface _Object

struct __declspec(uuid("a7e7ae20-5fb3-3c3f-a9fb-1fac0128dea1"))
IProtracReader : IDispatch
{}

struct TagReadEvent
{
__int64 <Index>k__BackingField; <<< These three lines are where the errors are.
__int64 <TagID>k__BackingField;
DATE <EventMoment>k__BackingField;
};

有谁知道为什么编译器会生成这个给我错误的文件?非常感谢任何帮助!

最佳答案

这些字段是在您使用自动属性时由 C# 编译器生成的。喜欢:

[ComVisible(true)]
public class TagReadEvent {
public long Index { get; set; }
// etc...
}

您应该返回并修复 C# 代码。还使用接口(interface)并将类/结构保留为 [ClassInterface(ClassInterfaceType.None)] 以便不公开任何实现。 COM方式。如果不能,则可以在#import 指令中使用exclude 属性来跳过麻烦制造者。喜欢:

#import "something.dll" exclude("TagReadEvent")

重命名 属性也可以修复它。

关于c++ - VC++ 6.0 从 COM DLL 生成的 .TLH 结果出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com