C# 如何从VC++;?

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(

我有一个遗留的(非.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(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。