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...


Anmelden zum Antworten