Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

Header-datei für DLL erstellen, lib ist vorhanden.

ShortCircuit / 4 Antworten / Flachansicht Nickles

Problem:

Ich habe eine DLL (GSSocket.dll) ohne *.lib und ohne *.h File.

Erstes Problem gelöst (hoffe ich):
GSSocket.lib habe ich mittels ImpLib32 erstellt (alternativ über /dumpbin und /lib).

Zweites Problem (und ich bin einfach keine Programmierleuchte):
Wie sieht mein Header-File aus?
Folgende Infos habe ich:


*** GSSocket COM Component ***

The GSSocket.dll is a COM based dll used to provide ASP with some Sockets API functionality.

Installation:
*******************************************************************************************

This COM dll works with IIS and PWS (versions that support ASP). If you have never
installed an ASP based COM dll, follow these instructions:

1. Click on the Windows "Start" button.

2. Click on the "Run..." menu item.

3. Determine the path to "regsvr32.exe". (ie: c:\\windows\\system\\inetsrv\\regsvr32.exe)

4. Determine the path to "GSSocket.dll". (ie: c:\\foo\\GSSocket.dll)

5. Type the path to "regsvr32.exe", a space, then the path to "GSSocket.dll" and then click
the "OK" button. As an example, if your path to your GSSocket COM was "c:\\foo\\GSSocket.dll" and
the path to "regsvr32.exe" was "c:\\windows\\system\\inetsrv\\regsvr32.exe" you would type
"c:\\windows\\system\\inetsrv\\regsvr32.exe c:\\foo\\GSSocket.dll" in the "Run..." dialog. On most
systems you will not need to determine the path of "regsvr32.exe" if the PATH environment
variable is set for the directory that contains it. In this case you simply can type
"regsvr32.exe c:\\foo\\GSSocket.dll" in the "Run.." dialog.


Component Details:
*******************************************************************************************
OBJECT: GSSocket

INTERFACE: GSSocket.TCPSock

METHODS:
-------------------------------------------------------------------------------------------
Return Value Method Name Parameters Purpose
-------------------------------------------------------------------------------------------
String Connect strAddress, PortNum Connect to a listening socket.
String Send strBuffer Sends data in strBuffer.
String Recv none Returns any data received.
none Close none Closes the TCP connection.

INTERFACE: GSSocket.UDPSock

METHODS:
-------------------------------------------------------------------------------------------
Return Value Method Name Parameters Purpose
-------------------------------------------------------------------------------------------
String Send strAddr, PortNum, strBuffer Send UDP data.
String Recv strAddr, PortNum Returns any received UDP data.

Usage Example (VBScript):
*******************************************************************************************


Result = ""
Data = ""

\'Create a TCPSock object.
Set tcp = Server.CreateObject("GSSocket.TCPSock")

\'Could use an IP or hostname string for the address.
Result = tcp.Connect("10.1.7.2", 1234)

If Result "OK" Then
Response.Write(Result & "
")
End If

\'Send some data...
Result = tcp.Send("My data is this string.")

If Result "OK" Then
Response.Write(Result & "
")
End If

\'Receive data that is returned, if the remote host actually returns anything!.
Result = tcp.Recv

If InStr(Result, "ERROR:") Then
Response.Write(Result & "
")
Else
Data = Result
End If

tcp.Close

Set tcp = Nothing
%>






Drittes Problem:
Das Headerfile wird mittels include in mein c-file eingebunden.
Kann ich dann ganz normal mit

GSSocket.UDPSock.Send(IP, PORT, Message),

diese Funktion nutzen?

Dumme fragen, ich weiss....

Kann jemand helfen
Danke
Jens
bei Antwort benachrichtigen
thomas woelfer ShortCircuit „Header-datei für DLL erstellen, lib ist vorhanden.“
Optionen

hi.

naja, generell ist es so das man nur mit einer dll allein nicht viel anfangen kann - schon allein deshalb weil die calling conventions fuer die eintrittspunkte in dlls nicht standartisiert sind. wenn implib funktioniert, dann hast du eine dll die mit einem compiler/linker erzeugt wurde die mit dem sdk compiler kompatibel ist - und dann ist die nutzung auch in der theorie moeglich. damit ist 1.) schon durchaus richtig - nur der voellig falsche weg.

zu 2.) - deinem headerfile. das koennte man prinzipiell bauen wenn es sich um eine 'normale' dll handelt - aber in diesem fall handelt es sich um eine dll dir fuer den transport eines com objektes zustaendig ist. das bedeutet, das die information darueber entweder in form einer typelibrary vorliegen muessen, oder aber zur laufzeit erfragt werden muessen - so funktioniert com nunmal. wie das objekt aussieht ist ja beschrieben... mal angenommen du wuerdest aus der beschreibung der methoden ein headerfile zusammenbauen in dem funktionen drin stehen: wuerde es dann gehen? - nein, das wuerde es nicht. die methoden sind naemlich methoden eines objektes und eben keine funktionen die du einfach per c aufrufen kannst. das fuehrt dann auch zu 3.)

ne, geht nicht. was du tun musst ist das objekt mit CoCreateInstance() zu erzeugen. dann kuemmert sich die com library drum das so eine instanz erzeugt wird. _die_ kannst du dann mit queryinterface nach ihren interface fragen, und von denen kannst du dann die methode aufrufen.

das ist in reinem c allerdings realtiv unschoen, weil man da vollstaendig auf die com library zurueckgreifen muss.

wenn du hingegen irgendein tool wie zum beispiel vc++ einsetzt, dann kannst du die dll per #import importieren - der compiler erzeugt dann wrapper-klassen - und diese dann benutzen. alterantiv kannst du die com helper (wie z.b. atl) benutzen um eine instanz dieses objektes zu erzeugen: mit reinem c ohne jede hilfe wird das ein bisschen _sehr_ unhandlich.

WM_HOPETHISHELPS
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen