C++로 설계된 PLSQL Developer IDE 용 플러그인으로 사용될 C# DLL을 만들고 있습니다.C# 포인터에 C# 포인터를 할당하는 방법
C# DLL은 C++ 포인터를 받아 들여 나중에 포인터를 함수 또는 메서드에 할당해야 나중에 호출 할 수 있습니다.
IDE는 이러한 플러그인을 작성하기위한 사양 문서를 제공하지만 C++ 및 Delphi 용 샘플 만 제공합니다. 내가 지금까지 가지고
void (*IDE_MenuState)(int ID, int Index, BOOL Enabled);
BOOL (*IDE_Connected)();
void (*IDE_GetConnectionInfo)(char **Username, char **Password, char **Database);
void (*IDE_GetBrowserInfo)(char **ObjectType, char **ObjectOwner, char **ObjectName);
void RegisterCallback(int Index, void *Addr)
{
switch (Index)
{
case 10 :
(void *)IDE_MenuState = Addr;
break;
case 11 :
(void *)IDE_Connected = Addr;
break;
case 12 :
(void *)IDE_GetConnectionInfo = Addr;
break;
case 13 :
(void *)IDE_GetBrowserInfo = Addr;
break;
}
}
C 번호 : 사양 문서는 내가이 screenshot.
제공 C++ 예에 포함 된 추가 정보를 제공
나는 로버트를 사용하고 있음을 유의 Gieseckes Unmanaged Exports 내보내기 기능을위한 NuGet 패키지. 필요한 경우이를 변경할 수 있습니다.
public bool IDE_Connected()
{
return false;
}
public void IDE_MenuState(int ID, int Index, bool Enabled)
{
}
[DllExport("add", CallingConvention = CallingConvention.Cdecl, ExportName= "RegisterCallback")]
public static void RegisterCallback(int Index, IntPtr Addr)
{
if (Index == 10)
{
// Assign IntPtr Addr to IDE_MenuState()
// Please help :)
}
if (Index == 11)
{
// Assign IntPtr Addr to IDE_Connected()
// Please help :)
}
}
가 어떻게 내 C# 방법으로 C++ 포인터 인수를 지정할 수 있습니다 ?
C#에서'void *'유형을 사용해 보셨습니까? –
AddP 매개 변수를 intPtr에서 void *로 변경할 수 있습니다. 그렇다면 void * Addr을 메서드에 할당하려면 어떻게해야합니까? 감사. –
'Marshal.GetDelegateForFunctionPointer()' –