Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Borland C++ - import DLL + dziwna deklaracja w VBA

damian34 02 Sty 2009 10:51 1972 1
  • #1 02 Sty 2009 10:51
    damian34
    Poziom 14  

    Sprawa wygląda tak, że mam bibliotekę DLL, która sczytuje dane po porcie RS-232 z oscyloskopu i zapisuje je do excela. Nie mam żadnej dokumentacji do tej biblioteki za wyjątkiem programu w VBA pod excel.

    Chcę zaimportować tą bibliotekę pod Borlanda i używać jej normalnie w programie i tu pojawiają się schody.
    Niby biblioteka się importuje, ale nie sczytuje dobrze danych z oscyloskopu - pobiera jakieś dziwne dane i nie kończy transmisji (pobiera z 10 znaków, a powinien pobrać 2048).

    W pliku vba deklaracja funkcji z biblioteki dll wygląda tak:

    Code:

    Declare Function RemoteA Lib "SCOPE.DLL" Alias "Remote" (ByVal ComID As String, ByVal BaudRate As Long, ByVal Buffers As Long) As Integer
    Declare Function LocalA Lib "SCOPE.DLL" Alias "Local" () As Integer
    Declare Function WriteReadScope Lib "SCOPE.DLL" (ByVal OuString As String, ByVal BytesToWrite As Long, BytesWritten As Long, ByVal InString As String, ByVal BytesToRead As Long, BytesRead As Long) As Integer


    Ja u siebie deklaruje ją tak (w pliku nagłówkowym):
    Code:

    HINSTANCE NaszDLL = LoadLibrary("SCOPE.dll");
    RunRemoteA RemoteA =(RunRemoteA)GetProcAddress(NaszDLL, "Remote");
    RunWriteReadScope WriteReadScope =(RunWriteReadScope)GetProcAddress(NaszDLL, "WriteReadScope");
    RunLocalA LocalA =(RunLocalA)GetProcAddress(NaszDLL, "Local");


    Dodam jeszcze, że do odczytu i zapisu w excelu używane są zmienne, których deklaracje wyglądają tak:
    Code:

    Dim InString As String * 2068
    Dim OutString As String * 2068

    Czy ktoś wie jak powinna wyglądać deklaracja analogicznej zmiennej w C++?

    Dodam, że oscyloskop to HAMEG HM-1507 i pod excelem wszystko śmiga.
    Jak coś, to mogę dołączyć plik excela.

    0 1
  • #2 03 Sty 2009 15:31
    Chris_W
    Poziom 37  

    W wywołaniu getprocaddress powinno użyć się nazwy oryginalnej funkcji w DLLu. Ty używasz innej (np. 'Remote' zamiast 'RemoteA'). 'ALIAS' w basicu oznacza zakrycie nazwy funkcji inną nazwą. Np. ten RemoteA jest zmieniany na Remote i tylko tej nazwy później się używa w programie.
    W getprocaddress powinno być oryginalne nazewnictwo z DLLa (np. 'RemoteA'), lub użyj indeksów.

    0