Forum: VB.NET |
Thema:
pinvoke Marshal Problem |
Von:
G. Guest (
09.08.2005 12:47) |
hallo, ich versuche verzweifelt funktionen einer dll aufzurufen, vieleicht kann mir hier jemand helfen.
hier ein teil der DLL Doku:
---------------------------------------------------------
procedure CreateServerAndMakeListenToClients( vProcessProc: TProcWithPChar;
vWriteToLogProc: TProcWithPChar;
onClientConnectProc: TProc;
onClientDisconnectProc: TProc;
vPort: PChar);
Procedure creates Server communication object, with defined parameters and starts waiting for Client(s).
This procedure is used by Server application - remote control program.
Input parameters are:
vProcessProc: TProcWithPChar - define pointer to procedure which will be called every time Server
receives message(s) from Client.
vWriteToLogProc: TProcWithPChar - define pointer to procedure which is useful especially during
debugging of Server program. Procedure is called when any of basic Client-Server communication events
occures.
Communication events are: connect/disconnect Client-Server, send message to Client, receive message
from Client. Procedure can contain user defined write to memo or log window of Server application.
onClientConnectProc: TProc - procedure is called as event when Client is connected to Server
onClientDisconnectProc: TProc - procedure is called as event when Client is disconnected from Server
vPort - defines port for TCP communication (default is 'telnet')
Server does not have address defined itself. Internally Server has defined address 0.0.0.0, which means,
that Server accepts Clients from all interfaces.
das ist die Doku zu einer der Funktionen die ich aufrufen will
im Moment versuch ich es so:
'Delegate wird erzeugt
Public Delegate Sub makeDelegate(ByVal line As String)
Public Delegate Sub makeDelegate(ByVal line As String)
Public Delegate Sub makeDelegate2()
Dim objDelegateWithStringParam As makeDelegate
Dim objDelegateWithoutpar As makeDelegate2
'pointer wird eine Adresse zugewiesen
objDelegateWithStringParam = AddressOf meineFunction
objDelegateWithoutpar = AddressOf meineFunction2
<DllImport("remotelb.dll", _ EntryPoint:="CreateServerAndMakeListenToClients", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function MeinAlias(ByVal vProcessProc _ As makeDelegate, ByVal WriteToLogProc As makeDelegate, _ ByVal vPort As makeDelegate2, ByVal vAddr As _ makeDelegate2)
' Leave function empty - DLLImport attribute _ forwards calls to CreateServerAndMakeListenToClients to _
' CreateServerAndMakeListenToClients in _ remotelb.DLL.
End Function
und so der aufruf
MeinAlias(objDelegateWithStringParam, objDelegateWithStringParam, objDelegateWithoutpar, objDelegateWithoutpar)
ach ja das ganze hab ich ntürlich auch schon mit declare versucht? was mach ich falsch? wie muß ich die Variablen deklarien damit das marshalen funktioniert???
oder mach ich was ganz falsch?
Bei anderen funktion mit datentypen wie integer oder Boolean ist alles kein Problem.
aber hier bekomme ich immer die Fehlermeldung
Eine nicht behandelte Ausnahme des Typs 'System.Runtime.InteropServices.MarshalDirectiveException' ist in Smartprog.exe aufgetreten.
Zusätzliche Informationen: PInvoke-Einschränkung: Es können keine Varianten zurückgegeben werden
wäre toll wenn mir mal jemand weiterhelfen könnte
die Dll heist remotlb.dll und ist hier enthalten
http://www.elnec.com/sw/pg4uwarc.exe
Betreff |
Von |
Datum |
|
  |
Re: pinvoke Marshal Problem
Hallo ?,<br><br>ich habe leider keine Zeit mir diese DLL doku reinzuziehen, aber was mir auf anhieb auffällt ist folgendes:<br>Shared Function MeinAlias (blablabla, ....) XXXX<br>Da es sich hierbei um eine... |
 |
 |
 |
|
|
Tobi
Ulm
|
09.08.2005 15:31 |
|
  |
Re: pinvoke Marshal Problem
Sorry hab leider mist gepostet,<br><br>Das ist natürlich ein SUB !<br><br>und die richtige Fehlermeldung ist:<br><br>Eine nicht behandelte Ausnahme des Typs 'System.Runtime.InteropServices.SEHException' ist in... |
 |
 |
 |
|
|
G.
Guest
|
10.08.2005 07:09 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!