Kayıt olmadan COM ile .NET COM bileşenlerini kullanabilirsiniz - bkz. here.
Başka bir seçenek de C++/CLI'yi köprü olarak kullanmaktır. Yönetilen koda maruz kalmaları için yönetilmeyen API'leri çoğunlukla kullanmaya alışkın olduklarını biliyoruz, ancak aslında her iki şekilde de çalışıyor. /clr
ile derlemek ve yönetilmeyen koddan çağrılabilen düz yönetilmeyen dışa aktarmalarla .dll
derleme üretmek mümkün her zaman oldugu gibi. İşte System::String::ToUpper
bu şekilde ortaya çok basit bir örnek:
// compile with cl.exe /clr /LD wrapper.cpp ole32.lib
#include <windows.h>
__declspec(dllexport)
wchar_t* ToUpper(const wchar_t* wcs)
{
System::String^ s = gcnew System::String(wcs);
array<wchar_t>^ chars = s->ToUpper()->ToCharArray();
size_t size = chars->Length * 2;
wchar_t* dst = (wchar_t*)CoTaskMemAlloc(size + 2);
pin_ptr<wchar_t> src = &chars[0];
memcpy(dst, src, size);
dst[chars->Length] = 0;
return dst;
}
Bu wrapper.dll
üretecek -/hibrit yönetilen yönetilmeyen montaj - ve bir ihracat kütüphane wrapper.lib
. aşağıdaki gibi ikinci bir saf doğal uygulamasında kullanılabilir:
şeffaf yönetilen kod yerel koddan (zaten orada yüklü olmaması durumunda) bu çağıran süreci içine CLR çalışma zamanını yükleyecektir uygulama ve sevk yılında
// compile with cl.exe test.cpp ole32.lib wrapper.lib
// note, no /clr
#include <stdio.h>
#include <windows.h>
wchar_t* ToUpper(const wchar_t* wcs);
int main()
{
wchar_t* s = ToUpper(L"foo");
wprintf(L"%s", s);
CoTaskMemFree(s);
}
- tüm büyü C++/CLI derleyici tarafından yapılır.
Regasm.exe/codebase seçeneği ile GAC içinde olması gerekmez. –