eigene DLL erstellen

futbee

Grünschnabel
Hallo,

habe eine (wahrscheinlich) triviale Frage. Wie erstelle ich in VB.Net eine DLL?
Ich dachte das geht über eine Klassenbibliothek, zumindest wird da eine DLL erzeugt. Wenn ich die aber mit regsvr32 registrieren will bekomm ich die Fehlermeldung, das der DLLRegisterServer Einsprungpunkt nicht geunden wurde.
Könnet mal jemand eine´kurzez Quellcodebeispiel für eine DLL posten oder muß beim Projekt was beachtet werden?

Danke
 

Dario Linsky

Erfahrenes Mitglied
Klassenbibliotheken in .net sind DLLs, aber regsvr32 macht manchmal solche Zicken, registriert sind die Bibliotheken nachher trotzdem im Normalfall.
 

Alexander Schuc

crazy-weasel
Eine .net DLL wirst du eher nichtmit regsvr32 registrieren müssen/wollen.
Entweder du legst sie ins selbe Verzeichniss wie die ausführbare Datei, welche die DLL benötigt, oder gibst sie in den Global Assembly Cache.

Um das Assembly in den GAC zu geben benutzt du folgenden Befehl:

Code:
> gacutil /i blabla.dll

Ein bisschen mehr über den GAC findest du hier

Wenn ein COM-Client deine DLL verwenden können soll und du deswegen die DLL in der Registry registrieren willst kannst du das mit dem Programm "regasm" machen, welches beim .net sdk dabei ist (wie gacutil).

Code:
> regasm bla.dll

Mit dem zusätzlichem Parameter "/regfile:bla.reg" kannst du dir eine Reg-Datei erstellen lassen, die registrierung wird dann aber nicht automatisch gemacht, sondern muss noch durch ausführen der Reg-Datei erledigt werden.

Mfg,
Alex
 

futbee

Grünschnabel
Danke erstmal für die Antworten.
Vielleicht ist mein Problem auch ein anderes.
Ich habe ein Windowsprogramm, das über eine DLL (mit vorgegebenen Namen) Daten zu anderen Anwendungen kommunizieren kann. Diese DLL muß eine Funktion mit 9 Parametern enthalten. Standardmäßig liegt diese DLL in eben diesem Programmverzeichnis. Ich muß jetzt eine gleichnamige DLL erstellen mit dieser einen Funktion drin. Ich habe auch eine erstellt, wenn ich die aber in das Verzeichnis kopiere und die ursprüngliche Datei ersetze, funktioniert der Aufruf nicht mehr. Nun weiß ich eben nicht an was das liegen könnte.
Das Beispiel für so eine DLL wird auch mitgeliefert, ist aber in Delfi programmiert und sieht so aus:

library ESPL;
uses StrUtils, Windows, Messages, SysUtils, Classes, System;

function DLL(sTicker: shortstring; var dllfunction,nLast,nLastsize,nBid,nBidsize,nAsk,nAskSize,nVolume: variant): variant; stdcall;
type
PCopyDataStruct = ^TCopyDataStruct;
tagCOPYDATASTRUCT = packed record
dwData: DWORD;
cbData: DWORD;
lpData: Pointer;
end;
TCopyDataStruct = tagCOPYDATASTRUCT;
COPYDATASTRUCT = tagCOPYDATASTRUCT;

var
hTargetWnd: HWND;
c,cLast,cLastsize, cTicker,cBid,cAsk,cBidsize,cAsksize,cVolume: string;
copydata: TCopyDataStruct;
x,p,r: integer;

begin {you would redesign only the code in this begin …end block}
......
end;

exports
DLL;
begin
end.

Wie muß das in VB.Net aussehen?

Bin für jede Hilfe dankbar