.NET 允許不同語言編寫的組件無縫互呼叫,只要遵循 CLS 規範。本系列示範以 C++/CLI、VB.NET、C# 分別實作同一介面的字典組件,再由 C# 用戶端統一呼叫。
// DICTVC.cpp
#using
using namespace System;
namespace DICTVC {
__gc public class DictionaryComponent {
private:
String* languageName;
String* availableLanguages[];
public:
DictionaryComponent() {
languageName = 0;
availableLanguages = new String*[4];
availableLanguages[0] = new String(L"Chinese");
availableLanguages[1] = new String(L"English");
availableLanguages[2] = new String(L"German");
availableLanguages[3] = new String(L"French");
}
bool LoadLibrary(String* language) {
for (int i = 0; i < 4; i++) {
if (language == availableLanguages[i]) {
languageName = language;
return true;
}
}
return false;
}
void FreeLibrary() {
languageName = 0;
}
__property String* get_CurrentLibrary() {
return languageName;
}
};
}
__gc public class:宣告受控類別,實例配置於 GC 堆疊。String*:受控字串指標,對應 C# string。__property:定義屬性,僅 get 為唯讀。new String*[4] 明確配置受控陣列。
cl /clr /c DICTVC.cpp
link /dll /noentry /out:..\Bin\DICTVC.dll DICTVC.obj
/clr:產生受控程式碼(MSIL)。/c:僅編譯不連結,產生 .obj。link /dll:連結為 DLL,/noentry 表示無傳統 DLL 進入點(由 CLR 管理)。/out 指定輸出路徑。將所有組件輸出至 ..\Bin,用戶端以 /reference:..\Bin\*.dll 參考,簡化部署與相對路徑問題。