C-DLL laden

18/09/2009 - 15:44 von Karsten Jung | Report spam
Hallo zusammen,

in einer DLL Test.dll liegt folgende Funktion:

void GetData(char* path, char** outputCaption);

Diese Methode möchte ich in C# verwenden.

Mein bisheriger Code (C#):


[DllImport("kernel32.dll")]
static extern int LoadLibrary(string fileName);

[DllImport("kernel32.dll")]
static extern int GetProcAddress(int handle, string procedureName);

public void test()
{
string path = getDllpath(); //Example
if ( File.Exists(path))
{
int handle = LoadLibrary(path);
if (handle != 0)
{
int procHandle = GetProcAddress(handle,
"GetVersionsNummer");
if ( procHandle != 0)
{
//STELLE A
//here I have to invoke
}
}
}

}



Ich komm' bereits erfolgreich zu Stelle A, die Handles sind gültig,
etc, nur wie rufe ich jetzt genau diese Funktion oben auf? Ich muss ja
irgendwie die beiden Parameter des Types char* und char** übergeben.

Ich muss es dynamisch machen, statisch kommt bei mir leider nicht in
Betracht.

Schonmals Danke.
 

Lesen sie die antworten

#1 Frank Dzaebel
18/09/2009 - 20:54 | Warnen spam
Hallo Karsten,

in einer DLL Test.dll liegt folgende Funktion:
void GetData(char* path, char** outputCaption);
Diese Methode möchte ich in C# verwenden.



Man kann das anhand dieser Informationen nicht
bestimmen, wie ein *funktionsfàhiger* C# Code diesbzgl.
auszusehen hat. Dazu müsste man mehr über die
Benutzung / Semantik innerhalb der C++ DLL
wissen. Eine rein syntaktische Übertragung wàre zum Beispiel:

[DllImport("DeineTestDLL", EntryPoint="GetData")]
static extern void GetData(IntPtr path, ref IntPtr outputCaption) ;

Dann kannst Du im Code "GetData(...)" aufrufen.
__________

Hàufig geht man hier aber über den StringBuilder.
Beispiele:

[pinvoke.net: GetShortPathName (kernel32)]
http://www.pinvoke.net/default.aspx...rtPathName

[Mit C# arbeiten - Verwenden von Win32 und anderen Bibliotheken]
http://msdn.microsoft.com/de-de/lib...31203.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen