【问题标题】:Problems with #import of .NET out-of-proc server.NET 进程外服务器的#import 问题
【发布时间】:2010-09-05 23:27:39
【问题描述】:

在 C++ 程序中,我正在尝试 #import .NET 进程外服务器的 TLB。

我收到如下错误:

z:\server.tlh(111):错误 C2146:语法错误:缺少 ';'在标识符“GetType”之前

z:\server.tlh(111):错误 C2501:'_TypePtr':缺少存储类或类型说明符

z:\server.tli(74):错误 C2143:语法错误:缺少 ';'在'tag::id'之前

z:\server.tli(74) : 错误 C2433: '_TypePtr' : 'inline' 不允许在数据声明中使用

z:\server.tli(74):错误 C2501:'_TypePtr':缺少存储类或类型说明符

z:\server.tli(74) : 致命错误 C1004: 发现意外的文件结尾

TLH 看起来像:

_bstr_t GetToString();
VARIANT_BOOL Equals (const _variant_t & obj);
long GetHashCode();
_TypePtr GetType();
long Open();

我对拥有基本对象 .NET 对象方法(如 GetType()、Equals() 等)并不真正感兴趣。但 GetType() 似乎会导致问题。

一些谷歌研究表明我可以#import mscorlib.tlb(或将其放在路径中),但我也无法编译。

有什么建议吗?

【问题讨论】:

    标签: c# c++ com interop


    【解决方案1】:

    在我的#import 中添加了 no_namespace 和 raw_interfaces_only:

    #import "server.tlb" no_namespace named_guids
    

    同时使用 TLBEXP.EXE 而不是 REGASM.EXE 似乎有助于解决这个问题。

    【讨论】:

    • TLBEXP 没有帮助我,raw_interfaces_only 帮助了我。为什么代码示例包含 named_guids 而不是 raw_interfaces_only?
    【解决方案2】:

    另外,请确保您的 C# 类没有此属性:

    [ClassInterface(ClassInterfaceType.AutoDual)]

    【讨论】:

    • 知道为什么会这样吗?
    【解决方案3】:

    通常,当 MSVC 将 COM 源编译为 TLB 时,会留下如下提示:

    #import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb"
    

    您应该将其添加到 stdafx.h 行之前

    #import "your_own.tlb"
    

    之后,_Type_ObjRef 等基本类型将添加到您的项目中以生成原型。

    希望能解决你的问题。

    但更大的问题是,当一切都完成后,在程序中调用 Ptr 时可能会出现运行时错误

    有人可以帮忙吗?

    【讨论】:

      【解决方案4】:

      看来你需要使用

      [ClassInterface(ClassInterfaceType.None)]
      

      这里是another discussion关于类似问题。

      【讨论】:

        【解决方案5】:
        #import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb"
        

        对我来说是解决方案。

        【讨论】:

        • 最近不得不用这个#import "C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\mscorlib.tlb" rename("or", "or2") rename("ReportEvent", "ReportEvent2") no_namespace
        猜你喜欢
        • 1970-01-01
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        • 2017-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多