如何从VC ++调用托管DLL(带GUI)?

时间:2015-01-09 04:01:08

标签: c# c++ wpf dll

我有一个遗留(非.NET)VC ++项目,需要使用一些用WPF / WCF编写的新组件。我创建了一个C#DLL来包装对WPF / WCF的调用。作为测试,我创建了一个C#客户端来使用这个DLL,一切似乎都运行正常。

然后,我按照文章How to call a managed DLL from native Visual C++ code in Visual Studio.NET or in Visual Studio 2005创建了用于测试的VC ++控制台应用程序。然而,GUI并没有出来。这是我的代码:

#include "stdafx.h"

#import "..\PreDll.tlb" raw_interfaces_only

using namespace PreDll;

int _tmain(int argc, _TCHAR* argv[])
{
    // Initialize COM.
    HRESULT hr = CoInitialize(NULL);

    // Create the interface pointer.
    ILicPtr pILic(__uuidof(Lic));

    VARIANT_BOOL bResult = FALSE;
    long lResult = 0;

    pILic->Check(&bResult);

    pILic->Add(3, 5, &lResult);

    wprintf(L"The result is %d\n", lResult);

    CoUninitialize();
    return 0;
}

为了验证,我还包括了Microsoft示例中的Add方法,该方法工作正常。但是,我的函数调用Check假设弹出一个对话框,它永远不会发生。我错过了什么?

2 个答案:

答案 0 :(得分:0)

尝试取消注册并注册

> regsvcs /u myDLL.dll

> regasm myDLL.dll /unregister

> regasm myDll.dll /tlb:myDLL.tlb /codebase


//i hope you have both of them in same interface
public interface ILicPtr
{
    int Add(int x, int y);
    int Check();
};

答案 1 :(得分:0)

您是否可以使用调试器来验证您是否可以从C ++ _tmain例程步入您的.net例程?代码是否干净地返回,或者引发了某种异常?如果两个项目在同一个解决方案中,调试应该是无缝的。

你能发布显示弹出窗口的C#代码吗?

如果可以从C ++步入C#没问题,并且没有发生奇怪的异常,那么我会看一下你的UI引擎的设置。