从 DLL 创建 IDL 文件

发布于 2024-10-21 03:57:44 字数 1016 浏览 2 评论 0原文

我正在开发一个 VB6 图形界面,该界面使用从 C 代码生成的 DLL,该 C 代码使用 __declspec(thread) 变量。问题是,由于已知限制,无法动态链接此 dll VB6 项目。

因此,正如讨论中所建议的,一个可能的解决方案是创建从 DLL 生成 IDL 文件,使用 MIDL 编译器对其进行编译,然后在 VB6 项目中引用生成的 .tlb 文件。

我能够生成 .tlb 文件,直到我必须指定包含结构变量的函数

[
  uuid(YOURTYPE-LIBG-UIDH-ERE0-000000000000),
  version(1.0),
  helpstring ("My Type Library 1.0")
]
library MyTypeLib
{
    importlib("stdole2.tlb");

    [dllname("OLEAUT32")]
    module OleAut32
    {
        [entry("myFunct")]
        int myFunct([in] myStruct data);
    };
};

在行:int myFunct([in] myStruct data);编译器说:

语法错误:期待“myStruct”附近的类型规范

有没有办法让它工作?就像 IDL 文件中的某种结构声明一样?

谢谢,

GB

此处由 wqw 解决。谢谢

I'm working on a VB6 graphical interface that make use of a DLL generated from a C code that makes use of __declspec(thread) variables. The problem is that because of a known limitation, it is not possible to dynamically link this dll in the VB6 project.

So, as suggested in this discussion, a possible solution is to create an IDL file from the DLL, compile it with a MIDL compiler, and then reference the resulting .tlb file in the VB6 project.

I'm able to generate the .tlb file until I have to specify functions that contain struct variables

[
  uuid(YOURTYPE-LIBG-UIDH-ERE0-000000000000),
  version(1.0),
  helpstring ("My Type Library 1.0")
]
library MyTypeLib
{
    importlib("stdole2.tlb");

    [dllname("OLEAUT32")]
    module OleAut32
    {
        [entry("myFunct")]
        int myFunct([in] myStruct data);
    };
};

At the row: int myFunct([in] myStruct data); the compiler says:

syntax error: expecting a type specification near "myStruct"

Is there a way to make it works? Like some kind of struct declaration in the IDL file?

Thank you,

G.B.

SOLVED here by wqw. Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文