.NETCOMコンポーネントで登録不要のCOMを使用できます。ここを参照してください。
もう1つのオプションは、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
。後者は、次のように純粋なネイティブアプリケーションで使用できます。
// 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);
}
実際には、CLRランタイムを呼び出しプロセスにロードし(既にロードされていない限り)、ネイティブコードからマネージコードに透過的にディスパッチします-すべての魔法はC ++/CLIコンパイラによって実行されます。