Programmieren - alles kontrollieren 4.932 Themen, 20.605 Beiträge

VC++ Dll in VB einbinden....

LKW-Peter / 1 Antworten / Baumansicht Nickles

Halllo, ich möchte in VC++ eine Dll schreiben auf die ich dann aus VB zubreifen kann.
mein VC++ Source sieht ungefär so aus :
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
long test(long lc)
{
return lc;
}
Wenn ich nun unter VB die Funktion "test" folgendermaßen einbinde :
Public Declare Function test Lib "C:\test.dll" (ByVal lc As Long) As Long
bekomme ich immer folgende Fehlermeldug :
"DLL-Einsprungpunkt test in C:\test.dll nicht gefunden"....
Was habe ich falsch gemacht ?
Bin für jeden Tip dankbar.
LKW-Peter. (LKW-Peter)

Antwort:
wenn der source als c++ compiliert wurde liegt der eintrittspunkt fuer die funktion in form des 'gemangled'ten funktionsnamens vor - d.h. die funktion muss ueber diesen namen aufgerufen werden. (wie der lautet kannst du mit quick-view unter der 'exports' liste nachsehen.)
das ist aber eigentlich nicht der richtige weg - wenn du das programm als 'c' uebersetzen kannst ist das einfacher: dann kannst du einfach den funktionsnamen nehmen. wenn das programm als c++ uebersetzt wird brauchst du entweder ein .def file (mit gemangledem namen) oder du verwendest ein compilerspezifisches feature, unter vc++ zum bespiel das #pragma export. alternativ kannst du auch dafuer sorgen das innerhalb des c++ compilates nur die eine funktion als c uebersetzt wird - dann bleibt der name ebenfalls erhalten.
WM_HOPETHISHELPS
thomas woelfer
(thomas woelfer)

bei Antwort benachrichtigen
thomas woelfer LKW-Peter

„VC++ Dll in VB einbinden....“

Optionen

wenn der source als c++ compiliert wurde liegt der eintrittspunkt fuer die funktion in form des 'gemangled'ten funktionsnamens vor - d.h. die funktion muss ueber diesen namen aufgerufen werden. (wie der lautet kannst du mit quick-view unter der 'exports' liste nachsehen.)
das ist aber eigentlich nicht der richtige weg - wenn du das programm als 'c' uebersetzen kannst ist das einfacher: dann kannst du einfach den funktionsnamen nehmen. wenn das programm als c++ uebersetzt wird brauchst du entweder ein .def file (mit gemangledem namen) oder du verwendest ein compilerspezifisches feature, unter vc++ zum bespiel das #pragma export. alternativ kannst du auch dafuer sorgen das innerhalb des c++ compilates nur die eine funktion als c uebersetzt wird - dann bleibt der name ebenfalls erhalten.
WM_HOPETHISHELPS
thomas woelfer
(thomas woelfer)

this posting contains no tpyos.
bei Antwort benachrichtigen