1

我尝试导入 Microsoft 的 DIA SDK 以用于 .NET:

call "%VS90COMNTOOLS%\vsvars32.bat"
midl /I "%VSINSTALLDIR%\DIA SDK\include" "%VSINSTALLDIR%\DIA SDK\idl\dia2.idl" /tlb dia2.tlb
tlbimp dia2.tlb

这似乎在大多数情况下都可以正常工作,只是由于某种原因,它不包含某些接口(例如IDiaEnumFrameData),而包含其余接口则很好。

(该接口既不存在于 .DLL 文件中,也不存在于 .TLB 文件中——即使它存在于 C 和头文件中。)

这是什么原因造成的?

4

3 回答 3

1

基本上我所做的是在 IDiaDataSource 定义(in DIA SDK\idl\dia2.idl)中添加了一个额外的“MIDL hack”方法,该方法将所有“未使用”枚举类型作为参数。只要该方法位于接口定义的末尾(当然,您实际上并没有调用它),其余的 vtable 方法仍然可以正常工作。您还需要在文件开头添加其他接口的前向声明。

于 2015-02-12T02:35:00.443 回答
1

midl.exe 仅从 idl 描述中的“库”部分推送到生成的类型库项目(及其依赖项)。

将错过的接口添加到“库”部分,您将得到您想要的

//...
library Dia2Lib
{
//...
interface IDiaEnumFrameData; // << insert it
//...
}
于 2015-12-08T00:18:32.730 回答
0

我不确定是否要尝试艰难的道路,但是如果您可以访问 IDL,则可以使用类似于 Codeproject 上的 TaskScheduler 项目中所做的工作来模仿界面。(是的,我知道它很旧)。

TaskSchedulerInterop.cs

http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=2407

于 2012-02-28T04:12:56.917 回答