Forum: PC-Programmierung DLLs für VB?


von Moi (Gast)


Lesenswert?

Moin,

gewöhnlich nutze ich Java und unterstütze dies wenn notwendig mit C
dlls. Für ein Projekt muß ich aber C dlls für Visual Basic schreiben.
Daran bin ich bisher gescheitert und auch die Suche bei Google hat
nichts taugliches erbracht.
Ich benutze den LCC-Compiler. Wie kann ich da DLLs schreiben, auf die
Visual Basic auch zugreifen kann?

Gruß,

Moi

von René König (Gast)


Lesenswert?

Das ist im Grunde gar nicht so wild. Ich hoffe jedenfalls, Du redest von
VB6:

- Die Funktion muß der WINAPI Aufrufkonvention entsprechen. Zur Zeit
ist das __sdtcall.

- Die Funktion muß exportiert werden; der LCC kennt hierzu das
Schlüsselwort __declspec.

Eine einfache Funktion sieht dann z.B. so aus:

int WINAPI __declspec(dllexport) MyAdd(int a, int b)
{
  TCHAR szResult[88];
  wsprintf(szResult, TEXT("%d + %d = %d"), a, b, a + b);
  MessageBox(NULL, szResult, NULL, MB_OK);
  return a + b;
}

Der Name, unter dem die Funktion exportiert wird, wird vom Compiler
'verwurstelt'. Schau also nach, unter welchem Namen tatsächlich
exportiert wird. Dazu kannst Du beispielsweise den Dependency Walker
verwenden, zu finden hier: http://www.dependencywalker.com/

Jetzt kannst Du die Funktion aus VB aufrufen:

Private Declare Function MyAdd Lib "dlltest.dll" Alias "_MyAdd@8"
(ByVal a As Long, ByVal b As Long) As Long

Private Sub Command1_Click()
    MyAdd 2, 3
End Sub


Und wie ich vorhin noch erfahren habe, hat der LCC irgendwo einen
Schalter, um das Mangling zu beeinflussen (irgendwo in den
Projekt-Konfigurationen -> Linker -> Disable Underscores in exports
(oder so ähnlich)). Wenn das funktioniert, kannst Du für diese Funktion
das Alias einsparen. Da ich den LCC noch nie wirklich benutzt habe, kann
ich das leider nicht genau sagen.


Ich kann aber nur dringend raten, das Ganze in ein COM-Objekt zu
verbasteln. Das macht das Leben für alle einfacher. Allerdings solltest
Du dafür C++ anstelle von C benutzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.