问题是,我有一个我在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;
};
有谁知道为什么编译器会生成这个给我错误的文件?非常感谢任何帮助!
答案 0 :(得分:2)
这些是使用自动属性时由C#编译器生成的字段。像:
[ComVisible(true)]
public class TagReadEvent {
public long Index { get; set; }
// etc...
}
你应该回去修复C#代码。还使用接口并将类/结构保存为[ClassInterface(ClassInterfaceType.None)],以便不暴露任何实现。 COM的方式。如果你不能,那么你可以使用#import指令中的 exclude 属性来跳过麻烦制造者。像:
#import "something.dll" exclude("TagReadEvent")
重命名属性也可以修复它。