【发布时间】:2015-01-09 04:01:08
【问题描述】:
我有一个遗留(非 .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 的函数调用假设会弹出一个对话框,但它永远不会发生。我错过了什么?
【问题讨论】:
-
“它不出来”不是一个合适的问题描述。 不 使用 raw_interfaces_only,这只会让您忽略必需的错误检查。这些方法的返回值为 HRESULT,您必须验证它。该值告诉你出了什么问题,IErrorInfo 给你错误信息。
-
@Hans Passant 如果我删除 raw_interfaces_only,我什至无法编译。错误是“...ILic::Add' : function does not take 3 arguments”
-
你得到了友好的包装器,long lResult = pILic->Add(3, 5);查看 .tli 文件。