.NET COM 구성 요소와 함께 등록이 필요없는 COM을 사용할 수 있습니다 (here 참조).
또 다른 옵션은 C++/CLI를 브리지로 사용하는 것입니다. 사람들은 대부분 관리되지 않는 API를 래핑하여 관리되는 코드로 표시하는 데 익숙하지만 실제로는 두 가지 방식으로 작동합니다. /clr
으로 컴파일 할 수 있지만 비 관리 코드에서 호출 할 수있는 일반 관리되지 않는 내보내기로 .dll
어셈블리를 생성 할 수 있습니다 평소처럼 여기 System::String::ToUpper
그런 식으로 노출하는 매우 간단한 예는 다음과 같습니다
// 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;
}
이 wrapper.dll
생산합니다 -/하이브리드가 관리되지 않는 조립 - 및 수출 라이브러리 wrapper.lib
을. 다음과 같이 후자는 순수 네이티브 응용 프로그램에서 사용할 수 있습니다
투명하게 관리 코드에 네이티브 코드에서 (이 이미 장전하지 않는 한)는 호출 프로세스에 CLR 런타임을로드 연습과 파견에
// 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);
}
- 모든 마법은 C++/CLI 컴파일러에 의해 수행됩니다.
Regasm.exe/codebase 옵션을 사용하여 GAC에있을 필요는 없습니다. –