如何从非托管C ++的应用程序中使用IDL

时间:2018-12-05 23:00:26

标签: c++ visual-studio com

应用程序的.exe允许将IDL定义转储到.IDL文件中。

使用 midl ,我可以创建一个 .tlb 文件。

但是在C编译器中, #import 语句 我遇到了错误 无法打开源文件 ... ... .tlh

如何解决?

在VS Visual Basic项目中,我可以将此应用程序与COM接口一起使用,但是还有其他麻烦。

谢谢你的建议 嗯

1 个答案:

答案 0 :(得分:0)

我做到了,就像KimGräsman在 https://stackoverflow.com/a/1854637/3127177

这是应用程序TheServerApp的出路:

所有已安装 Microsoft Visual Studio Community 2017

使用命令行

搜索并执行 vcvars32.bat

然后执行

观看

(如果在第一次必须以管理员身份执行oleview.exe时出现问题)

在oleview窗口中,选择View TypeLibs

并打开TheServerApp.exe

,然后文件->另存为

因此, IDL定义存储在TheServerApp中。 idl

cd TheServerApp.IDL所在的位置

并执行

midl TheServerApp.IDL

因为我得到了错误

TheServerApp.IDL(481):错误MIDL2025:语法错误:期望在“单个”附近输入类型规范

Client \ TheServerApp.IDL(481):错误MIDL2026:无法从较早的语法错误中恢复;中止编译

我编辑了TheServerApp.IDL并用double替换了所有单词single

(请参见here

现在执行 midl TheServerApp **。IDL **

产生文件TheServerApp **。tlb **

因为在Visual Studio项目中#import TheServerApp.tlb报告错误

在您的项目中编写一个小程序import.cpp,内容如下:

// file to import with full path
**#import** " ... /**TheServerApp.tlb**"
int main(int argc, char* argv[])
{
}

并在命令行中按上述方式执行vcvars32.bat

执行 cl ./imports.cpp

生成TheServerApp **。tlh **和TheServerApp **。tli **

在我包含的.cpp中

#include "./TheServerApp.tlh"
#include "./TheServerApp.tli"

我还生成了TheServerApp.dll,但不知道会进一步需要它

tlbimp TheServerApp.tlb

哪个报告

TlbImp:导入到TheServerApp.dll的类型库

所以也有TheServerApp.dll文件

对于下一步,我必须学习更多