mikrocontroller.net

Forum: PC-Programmierung DLLs für VB?


Autor: Moi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: René König (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.