我想從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]'參數。什麼是例外?您是否調試了託管呼叫? –