C++ 使用 C# DLL。 InvokeHelper 的问题

Posted

技术标签:

【中文标题】C++ 使用 C# DLL。 InvokeHelper 的问题【英文标题】:C++ using C# DLL. Problem with InvokeHelper 【发布时间】:2011-02-17 16:58:14 【问题描述】:

我有一个c# dll,很简单:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassTestPourCPP

    [System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
    public class MainClass
    
        public int GiveInt2()
        
            return 2;
        
    

我希望我的 C++ 应用程序 (VC6) 能够使用它。所以我在启用“设置对 com 可见”选项的情况下构建了我的 dll。 我 regasm DLL,所以我有 tlb 文件。 然后我在 IDE 中导入了 tlb,它生成了一个 .h 和 .cpp 文件,就像它应该的那样。

long _MainClass::GiveInt2()

    long result;
    InvokeHelper(0x60020004, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
    return result;

现在的问题是,当我调用该方法时,它只是 .. 不起作用,给我一个错误的输出(它在调用之前给出了 result 的值,就像 InvokeHelper 中有一个 try catch 一样)

为什么它不起作用? :(

非常感谢!

【问题讨论】:

从提供的信息中无法猜测。至少使用#import 指令。 【参考方案1】:

在尝试使用 COM 对象之前,您是否致电 CoInitialize

【讨论】:

不,我实际上没有。我刚刚尝试过,但它不会影响我的 c# 方法调用的行为:代码是基本的:CoInitialize(NULL); _MainClass m_class; long a = m_class.GiveInt2(); @user621766:您可能希望从实例化本机 COM 对象开始(Windows 预装了一个数字),并且只有在您知道 COM 已正确初始化并正常工作后才引入 .NET 的复杂性. 嘿,是的,我不得不承认这似乎比我想象的要复杂。你能给我一些你谈到的本机 COM 对象名称吗?谢谢! 例如,Windows 附带a Dictionary object,用于脚本。 ProgID 是Scripting.Dictionary

以上是关于C++ 使用 C# DLL。 InvokeHelper 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 C#(WPF) 中使用 C++ dll

C#使用C++ dll问题

使用来自 C# 的托管 C++ dll

在 C# 中使用带有字符串的 C++ 类 (Dll)

在项目 c++ 中使用 c# dll

如何从 c++ 项目中调用用 c# 创建的 dll 文件? [复制]