我有一个遗留(非.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假设弹出一个对话框,它永远不会发生。我错过了什么?
答案 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引擎的设置。