zewnętrzne zmienne C# .NET 3.5

Odpowiedz Nowy wątek
uliasz13
2009-10-27 15:11
uliasz13
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:/

Pozostało 580 znaków

2009-10-29 11:03

Rejestracja: 10 lat temu

Ostatnio: 6 lat temu

0

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

Pozostało 580 znaków

verto
2009-10-30 08:21
verto
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#?

Pozostało 580 znaków

uliasz13
2009-11-02 12:38
uliasz13
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.

Pozostało 580 znaków

2009-11-02 13:32

Rejestracja: 11 lat temu

Ostatnio: 4 lata temu

0

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

Pozostało 580 znaków

uliasz13
2009-11-02 13:54
uliasz13
0

Niestety dalej to samo;/ bufor jest pusty

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

Pozostało 580 znaków

Odpowiedz

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