在C++中調用C#代碼需要使用平臺調用(Platform Invocation Services,P/Invoke)機制
MyCSharpLibrary.cs
的C#文件,內容如下:using System;
namespace MyCSharpLibrary
{
public class MyClass
{
public static int Add(int a, int b)
{
return a + b;
}
}
}
編譯這個文件,生成一個名為MyCSharpLibrary.dll
的DLL文件。
在C++項目中添加對C# DLL的引用。在Visual Studio中,右鍵單擊C++項目,選擇“屬性”,然后在“配置屬性”->“常規”中,將“附加包含目錄”設置為C# DLL的路徑,例如:C:\path\to\your\csharp\project
。
在C++代碼中使用P/Invoke調用C#方法。首先,需要包含一個頭文件,該文件定義了C# DLL中的方法簽名。創建一個名為MyCSharpLibraryWrapper.h
的頭文件,內容如下:
#pragma once
#ifdef MY_CS_LIBRARY_EXPORTS
# define MY_CS_LIBRARY_API __declspec(dllexport)
#else
# define MY_CS_LIBRARY_API __declspec(dllimport)
#endif
extern "C"
{
MY_CS_LIBRARY_API int MyCSharpAdd(int a, int b);
}
注意,我們使用了extern "C"
來防止C++的名稱修飾(name mangling),這樣C#代碼才能正確解析這些函數。同時,我們使用預處理器指令來定義MY_CS_LIBRARY_API
宏,以便在編譯時決定是導出還是導入函數。
#include <iostream>
#include "MyCSharpLibraryWrapper.h"
int main()
{
int result = MyCSharpAdd(3, 4);
std::cout << "The result is: " << result << std::endl;
return 0;
}
現在,當你編譯并運行C++代碼時,它將調用C# DLL中的MyCSharpAdd
方法,并輸出結果。
請注意,這種方法有一些限制,例如C#和C++之間的數據類型需要匹配,以及C#代碼中的某些特性(如異常處理)無法直接在C++中使用。在實際項目中,你可能需要根據具體需求調整這些示例代碼。