我想从C++调用C#代码。所以我选择了COM Interop方式。现在我有C#代码:从C++调用c#,返回值
namespace ToBeCalled
{
[Guid("9329feaf-b293-4093-a7d8-6128f52b30a6")]
[ComVisible(true)]
public interface IInterface
{
int Write(string toWrite);
}
}
namespace ToBeCalled
{
[Guid("e4105e40-2d6b-4b7c-ae42-d2f9c405a2a0")]
[ComVisible(true)]
public class ClassYouWantToUse : IInterface
{
public int Write(string toWrite)
{
System.Console.WriteLine(toWrite);
return 1;
}
}
}
和C++代码
#import "...\\ToBeCalled.tlb"
int _tmain(int argc, _TCHAR* argv[])
{
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
ToBeCalled::IInterfacePtr piTest(__uuidof(ToBeCalled::ClassYouWantToUse));
long lResult = 0;
// Call the Add method.
piTest->Write("hi", &lResult);
wprintf(L"The result is %d\n", lResult);
// Uninitialize COM.
CoUninitialize();
return 0;
}
当我尝试这个编译,当然它说,写不采取2个参数。我看到了MSDN,他们有这样的例子,他们以这种方式获取返回值。所以我的问题是,我如何获得函数的返回值?当我更新电话
piTest->Write("hi");
比在未处理的异常上执行失败。当我尝试这个没有返回值的例子时,所以方法返回值的声明是无效的,比一切正常。
我发现需要将参数添加到C#中,然后我可以使用第二个参数来得到结果值的函数。好的,所以对于Int问题已经解决了,但是我怎样才能发送这样的字符串呢? –
您应该可以正常返回一个值,而不是通过'[out]'参数。什么是例外?您是否调试了托管呼叫? –