zewnętrzne zmienne C# .NET 3.5

0

Witam. Mam problemik typu:
mam zewnętrzna dll (napisana w innym jezyku ) i w niej :
zmienna(bufor ) typu: CHAR fbuf[256] - bufor wymiany
oraz funkcje: WORD LibVer(LPSTR lpBuf,WORD BufSiz) - odczyt informacji o wersji biblioteki.
gdzie : WORD - dwa bajty bez znaku (0..65535)
LPSTR - wskaznik do bufora wymiany
Wywołanie powyższej funkcji powoduje ze zwraca ona wynik do bufora wymiany fbuf. W C# mam problem
gdyż w buforze nic sie nie zmienia po wywołaniu zewnętrznej funkcji. Nie wiem czy deklaracja funkcji jest nieprawidłowa czy coś jest z zewnętrzną zmienna... , w C# da się zdeklarować zewnętrzna zmienna?

kod C#:

[DllImport("C:\ctrl.dll")]
public static extern int LibVer(char[] lpBuf, int BufSiz);

string wynik = "";

        IntPtr hdl = LoadLibrary("C:\\ctrl.dll");
        if (hdl != IntPtr.Zero) 
        {
            IntPtr addr = GetProcAddress(hdl, "fbuf");
        if (addr != IntPtr.Zero) 
            {

                Marshal.WriteInt64(addr,2);

       (LibVer("2".ToCharArray(), 64);//funkcja powinna wrzucic do bufroa  fbuf info o wersji dll              
                pole =  (Marshal.ReadInt64(addr).ToString()); //odczyt z bufora , nie zmienia sie nic

            }
        }

Proszę o pomoc:/

0

Normalnie jak funkcja robi coś ze stringami tak jak tutaj, to się po stronie C# robi argument typu StringBuilder...

0

A czy jest jakis inny sposób niż powyższy aby odwołać się do zewnętrznej zmiennej z dll
(tablicy fbuf) z C#?

0

Witam. Niestety dalej to samo. Po zmianie funkcji i użyciu StringBuldier w buforze nie ma danych do odczytu;/

Jest jakis inny sposób aby odwołać się do tego bufora ? Sposób za pomocą wskaźnika na adres w pamięci nie działa.

0

sprobuj pobrac
IntPtr addr = GetProcAddress(hdl, "fbuf");
po
LibVer("2".ToCharArray(), 64);

0

Niestety dalej to samo;/ bufor jest pusty

Jest on zdeklarowany: extern "C" __declspec(dllexport) CHAR fbuf[256]= ""; - bufor wymiany

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0