Laden...

DllImport von PcHelpWare Dll 1SCDLL.dll

Erstellt von Ali_Spindler vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.385 Views
A
Ali_Spindler Themenstarter:in
45 Beiträge seit 2011
vor 11 Jahren
DllImport von PcHelpWare Dll 1SCDLL.dll

Hallo an alle,

ich sitze nun schon seit geraumer Zeit an einem Problem. Ich probiere vergebens die Funktion Start_server aus eine PcHelpWare Dll names 1SCDLL.dll aufzurufen.

Bisher habi ich es so probiert:

[DllImport("1SCDLL.dll",EntryPoint="Start_server", CharSet = CharSet.Auto,  SetLastError = true)]
        public static extern void Start_server(StringBuilder strID, StringBuilder strRepeaterAddr, StringBuilder intListenPort, int intRepeaterPort, StringBuilder strPasswd, bool blDebug, StringBuilder blProxy);

....



In einem c++ Projekt hab ich gesehen dass die Funktion mit den Parametern


char *ID, char *repeater,char *direct,int port,char *passwd,bool proxy,char *classname

aufgerufen wird.
Wenn die Funktion nun aufgerufen wird, bekomme ich eine Exception mit der Meldung: > Fehlermeldung:

Unzulässiger Zugriff auf einen Speicherbereich. (Ausnahme von HRESULT: 0x800703E6) kann nicht geladen werden.

Alle Dll´s liegen im Anwendungsverzeichnis.

Kann mir bitte jemand weiterhelfen was ich falsch mache?

mfG Ali

Z
403 Beiträge seit 2007
vor 11 Jahren

Importiere dir GetLastError und schau mal was du für ein Fehler zurückbekommst.

A
Ali_Spindler Themenstarter:in
45 Beiträge seit 2011
vor 11 Jahren

Hi,



  [DllImport("coredll.dll", SetLastError = true)]
        static extern Int32 GetLastError();

......
.....

 try
{
Start_server(new StringBuilder(""), new StringBuilder(""), new StringBuilder(""), 56, new StringBuilder(""), false);
int lastError = Marshal.GetLastWin32Error();

}
catch (Exception ex) 
{
int lastError = Marshal.GetLastWin32Error();
}

hab das ganze jetzt so implementiert. Im catch-Block bekomme ich eine 0 zurück.

mfG

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Ali_Spindler,

für Eingabeparameter solltest du String und nicht StringBuilder übergeben.

herbivore

A
Ali_Spindler Themenstarter:in
45 Beiträge seit 2011
vor 11 Jahren

Hallo herbivore,

hab auch schon string probiert, jedoch mit dem gleichen ergebnis. Gibt´s eine andere Möglichkeit um zu schauen ob er eventuell irgendwelche anderen dll´s nicht findet?

Ich bin am verzweifeln, egal was ich probiere, ich erhalte immer oben genannte Exception.

mfG Ali

S
269 Beiträge seit 2010
vor 11 Jahren

Zum Nachsehen, ob irgendwelche DLL's nicht gefunden werden, benutze ich ganz gerne den Dependency Walker

A
Ali_Spindler Themenstarter:in
45 Beiträge seit 2011
vor 11 Jahren

Hallo,

das tool sagt dass alle dll´s gefunden wurden.

Kann es daran liegen, dass wenn meine Application als normaler user gestartet wurde, starte ich eine neu Instanz mit Administratorrechten und beende die laufende.

Kann es hier unter Win7 zu Problemen kommen?

mfG

A
Ali_Spindler Themenstarter:in
45 Beiträge seit 2011
vor 11 Jahren

Hallo nochmal,

mein Ziel war es eigentlich mit dieser dll einen VNC Server zu starten um mit einem Client verbinden zu können.
Als Highlight eventuell aus einem Windows Service heraus um vielleicht den UAC-Bildschirm von Win7 übertragen zu können.

Hat von euch schonmal jemand soetwas gemacht, oder irgendwelche erfahrungen dazu?

Ich bin für jeglichr Tipps dankbar.

mfG Ali

916 Beiträge seit 2008
vor 11 Jahren

H Ali_Spindler,

versuch mal den StringBuilder mit einer festen Größe zu initialisieren.


new StringBuilder("",255)

Wenn das ein C++ dll ist dann erwartet m.W.n einen Puffer mit fester Größe.

Again what learned...

M
334 Beiträge seit 2007
vor 11 Jahren

Wenn das eine C++-DLL ist kann man die meines Erachtens gar nicht aufrufen (da braucht man einen Wrapper in C)

Versuch mal ausserdem die genaue Signatur der Methode rauszufinden, sonst kann man nur raten.