SEHException bei Funktionspointer aus "unbekannter" DLL
-
Hallo,
ich habe ein kniffliges problem. ich habe eine Anwendung programmiert. c++. Eine meiner Klassen soll nun in einem bestimmten verzeichnis eine dll mit definiertem Namen suchen. In dieser DLL sind die Funktionen Init() und Download() implementiert.test.dll
char* Init(char* cT) { return cT; }; MyClass^ Download() { MyClass^ tmp = gcnew MyClass(); return tmp; }
In meiner Anwendung habe ich zwei passende Funktionspointer
main.cpp
namespace EXE{ typedef char* (WINAPI * PINIT) (char* cT); typedef MyClass^ (WINAPI * PDOWNLOAD) (); public ref class CManager { public: PINIT Init; PDOWNLOAD Download; ...
die ich mit GetProcAddress (cDLLHMODULE, "Init") und GetProcAddress (cDLLHMODULE, "Download") auf die Funktionen in der Bibliothek zeigen lasse.
Init() funktioniert prächtig. Aber wenn ich Download versuche, dann bekomme ich eine SEHException beim Aufruf des Funktionszeigers.manager->Download();
Ich vermute, dass das am '^' bei der definition des Pointers liegt. Mir ist es auch erst später aufgefallen. Denn MyClass ist unverwaltet:
public class MyClass { public: char* _sName; MyClass () { _sName = "Test"; } MyClass (char* sT) { _sName = sT; } ~MyClass () { }; };
Wenn ich allerdings statt '^' ein '*' versuche, dann bekomme ich gar nichts hin! Wenn ich nun versuche MyClass verwaltet zu machen, dann kann ich die DLL nicht mehr compilieren, weil er die beiden Funktionsverweise dann nicht mehr in der *.def-Datei findet.
Ich hab wahscheinlich nicht alles so klar geschrieben, aber wenn sich jemand damit auskennt, dann schicke ich euch gern den Code zu!!! ICH BRAUCH HILFE!!!
-
Dein Problem ist: Du hast kein C++ programmiert sondern C++/CLI!!!!
Bitte mach sowas nicht... das macht nur für InterOp Sinn und nicht für solche Sachen! NImm C# oder C/C++... aber nicht irgendwas mit .NET/CLR!