Ich erstelle eine C# -DLL, die als Plug-In für die PLSQL Developer IDE verwendet wird, die in C++ entwickelt wurde.So weisen Sie einer C# -Funktion einen C++ - Zeiger zu
Meine C# -DLL muss einen C++ - Zeiger akzeptieren und diesen Zeiger dann einer Funktion oder Methode zuweisen, die später aufgerufen wird.
Die IDE stellt ein Spezifikationsdokument zum Erstellen dieser Plug-ins bereit, stellt jedoch nur Beispiele für C++ und Delphi bereit. Die Spezifikationen Dokument enthält weitere Informationen, die ich in diesem screenshot. enthalten
bereitgestellt C++ Beispiel:
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# ich bisher habe:
Ich sollte anmerken, dass ich Robert bin mit Gieseckes Unmanaged Exports NuGet Paket zum Export von Funktionen. Ich kann das ändern, wenn nötig.
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 :)
}
}
Wie kann ich den C++ Zeiger Argument meiner C# Methoden zuweisen?
Haben Sie den 'void *' Typ in C# versucht? –
Ich könnte den Addr-Parameter von intPtr zu void * ändern. Was würde ich tun, um void * Addr einer Methode zuzuweisen? Vielen Dank. –
Sie könnten versuchen, Marshal.GetDelegateForFunctionPointer() ' –