DLLs für VB?

Gast #199116
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
Gast #199117
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren