C++ 6.0 Dll in VB.DotNet
-
Hallo,
hoffentlich bin ich im richtigen Thread, wie der Titel schon sagt geht es um eine C++ 6.0 Dll die ich geschrieben habe und die funktioniert. Aus VB 6.0 ist das kein Problem diese aufzurufen und zu benutzen, wenn ich diese Dll unter VB DotNet nutzen möchte gibt es da aber Fehler.
Muss ich beim schreiben meiner Dll in c++ irgendwas beachten wenn ich sie in VB DotNet (2005) nutzen möchte ?Gibt es dazu vllt. irgendwelche Tutorials, samples Workshops, Bücher etc.?
Danke für eure Mühe schonmal vorab !
Gruß
ShadowEater
-
Ohne Code und Signatur der C-Funktion kann man da schlecht was sagen...
Du musst halt als AUfrufkonvention __stdcall verwenden!
-
Hi,
danke für die schnelle Antwort, hier ist selbstverständlich der Code:
C++ DLL
AX_ECG_API long _stdcall LoadECG(unsigned char carrFile[], char carrHead[], long lDatas[]) { string ergebnis[60]; int iHeaderEnd = 0; unsigned char arrHeader[100]; string strAusgabe; for (int a = 0; a <= 60;) { arrHeader[a] = carrFile[a]; a++; } . . . . . for (int n = 0; n <= 2999;) { lDatas[n] = samplBuffer[n]; n++; } return 0;
VB:
Option Explicit Private Declare Function LoadECG Lib "F:\OMRON ECG Daten\ECG_Read_In_1\AX_ECG(VB Testprojekt)7\AX_ECG.dll" (ByVal File As String, ByVal Head As String, ByRef FirstDataElement As Long) As Integer Private Sub Form_Load() Dim iFile As Integer Dim Dummy As Integer Dim sHead As String Dim lData() As Long '-- ECG-Datei öffnen, einlesen, schließen Dim sFile As String iFile = FreeFile Open VB.App.Path & "\44DBE2AD.ecg" For Binary As #iFile sFile = Input(LOF(iFile), iFile) Close #iFile '-- DLL-Funktion aufrufen sHead = Space(100) ReDim lData(3000) Dummy = LoadECG(sFile, sHead, lData(0)) txtHead.Text = sHead '-- Returnwerte anzeigen Dim l As Integer For l = 0 To 2999 'UBound(lData) txtData.Text = txtData.Text & "/" & lData(l) Next l End Sub
Ich habe aus der C++Dll nur die Deklaration der Funktion und deas Ende der Funktion gepostet damit es nicht zu viel wird.
Wenn gewünscht poste ich auch gerne noch mehr !
Gruß
ShadowEater
-
Und wie sieht die Fehlermeldung aus?
Vermutlich passt der Namen der Funktion nicht...
Schau mal die DLL mit www.dependencywalker.com an wie der Name in der DLL wirklich heisst und pass dann das DllImport an...