Вы будете использовать COM для предоставления кода .NET для кода C ++:
1.
Отметьте интерфейс, который вы хотите предоставить, с помощью атрибутов COM:
[ComVisible(true)]
[Guid("5CBA864C-C063-4a47-2344-56AE016ABEE3")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IExposedInterface
{
void ShowForm();
}
2.
Отметьте реализацию, которую вы хотите предоставить, с помощью атрибутов COM:
[ComVisible(true)]
[Guid("BE337127-0DF7-2344-AD66-2338FE3926D8")]
[ProgId("NETAssembly.ExposedInterface")]
public sealed class ExposedInterface : IExposedInterface
{
}
3.
Используйте regasm.exe для создания файла tlb:
regasm.exe /tlb:NETAssembly.tlb NETAssembly.dll
4.
В коде C:
#include "stdafx.h"
#include <atlimage.h>
#import "NETAssembly.tlb" named_guids
int _tmain(int argc, _TCHAR* argv[])
{
// Initialize COM.
CoInitialize(NULL);
NETAssembly::IExposedInterfacePtr pIExposedInterface;
HRESULT hr = pIExposedInterface.CreateInstance(NETAssembly::CLSID_IExposedInterface);
pIExposedInterface->ShowForm()
// Release object.
pIExposedInterface = NULL;
// Uninitialize COM.
CoUninitialize();
return 0;
}