C# 如何从VC++;?
我有一个遗留的(非.NET)VC++项目,需要使用一些用WPF/WCF编写的新组件。我创建了一个C#DLL来包装对WPF/WCF的调用。作为测试,我创建了一个C#客户机来使用这个DLL,一切似乎都很好 然后,我按照文章创建了VC++控制台应用程序进行测试。然而,GUI并没有出现。这是我的密码:C# 如何从VC++;?,c#,c++,wpf,dll,C#,C++,Wpf,Dll,我有一个遗留的(非.NET)VC++项目,需要使用一些用WPF/WCF编写的新组件。我创建了一个C#DLL来包装对WPF/WCF的调用。作为测试,我创建了一个C#客户机来使用这个DLL,一切似乎都很好 然后,我按照文章创建了VC++控制台应用程序进行测试。然而,GUI并没有出现。这是我的密码: #include "stdafx.h" #import "..\PreDll.tlb" raw_interfaces_only using namespace PreDll; int _tmain(
#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的函数调用假设会弹出一个对话框,但这种情况从未发生过。我错过了什么 尝试注销并注册
> 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();
};
你能使用调试器来验证你可以从C++的Type例程到你的.NET例程吗?代码是干净地返回还是引发了某种异常?如果两个项目在同一个解决方案中,调试应该是无缝的
你能发布显示弹出窗口的C代码吗<>如果C++从C到C++没有问题,也不会发生异常的异常,那么我会看看你的UI引擎的设置。你能解释一下为什么注销和注册可以解决这个问题吗?对于接口,是的,在同一接口中,我有所有方法。正如你所说的Add()工作正常,我建议你在C++添加函数中调用Cuffor(),这样当你在C++中执行Add()时,它会被调用,或者写日志到文件“它不出来”不是一个合适的问题描述。不要只使用原始接口,这样只会让您忽略所需的错误检查。这些方法的返回值是HRESULT,必须对其进行验证。该值告诉您出了什么问题,IErrorInfo会给出错误消息。@Hans Passant如果我只删除原始接口,我甚至无法编译。错误是“…ILic::Add”:函数不接受3个参数“您得到了友好的包装,long lResult=pILic->Add(3,5);看看T.Li文件,我不能从C++进入C语言,因为我不能直接引用C语言的DLL,我必须先把它转换成TLB,然后在C++项目中导入TLB。