Указатель функции C ++ в C # DLL

У меня есть C ++ DLL, вызывающая C # DLL через COM. Когда я инициализирую свою C # DLL, я хотел бы передать функцию обратного вызова. Я, кажется, получаю случайные сбои. Может кто-нибудь объяснить, что я делаю не так?

C ++

communications.h

#import "ultra_comm.tlb"
typedef void(*ExternalKickPtr)(const char*, const char*);

class UltraComm
{

public
:
void Initialize(ExternalKickPtr kick);
private:
ultra_comm::ICOMPtr iCOM;
};

communications.cpp

#include "communications.h"
void UltraComm::Initialize(ExternalKickPtr kick)
{
::CoInitialize(NULL);
iCOM.CreateInstance(__uuidof(ultra_comm::Communications));

iCOM->Initialize((long)kick);   **<-- this seems to be where it crashes**
}

ultra_css.h

void ExternalKickFunc(const char* steamId, const char* message);

ultra_css.cpp
UltraComm* ultra = NULL;

ultra = new UltraComm();
if(ultra)
{
ultra->Initialize(&ExternalKickFunc);
}

C #

Communications.cs

namespace Ultra_Comm
{
[ComVisible(true)]
[Guid("DAB7E676-44B4-4D3E-947A-7D9369AE2D43")]
public interface ICOM
{
void Initialize(IntPtr kick);
}

[ComVisible(true)]
[Guid("DFC77C60-945E-4712-AE2F-DCF5379BA83B")]
public class Communications : ICOM, IWCF
{
delegate void FuncKickPlayer(string steamId, string message);

static FuncKickPlayer _kick;

public void Initialize(IntPtr kick)
{
_kick = Marshal.GetDelegateForFunctionPointer(kick, typeof(FuncKickPlayer)) as FuncKickPlayer;
}
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]