Parametr przekazany do funkcji w dll (C++) ginie

0

Siedzę nad tym już którąś godzinę, powinno działać, a nie działa. Mam dll w C++ i chcę ją wywołać w C#. Przekazuję funkcji w dll parametr, który w dll nagle ma wartość 0. Parametr jest ustawiany wcześniej w C#.

Kod dll:

extern "C"
{
    __declspec(dllexport) void __stdcall _func(float *p1)
    {        
        ofstream f;
        f.open("log.txt", ios::out);
        f << "p1: " << p1 << endl;
        f << "*p1: " << *p1 << endl;
        f.close();
    }
}

Kod w C#:

[DllImport(@"lib.dll", EntryPoint = "__func@20", CallingConvention = CallingConvention.StdCall)]
        public static extern void func(ref double param1);

W C# przed wywołaniem funkcji ustawiam param1 na jakąś wartość (inną niż 0). I z jakiegoś powodu w funkcji dll ten parametr przyjmuje wartość 0.
p1 - daje normalny adres (inny niż 0)
*p1 - daje 0.

O co tu chodzi?

1

Strzelam czy wpływu na to nie może mieć czasem zadeklarowanie parametru jako float w funkcji C++ a jako double w C# ?

Wpływ na pewno ma. float to nie double.

Albo oba na float albo oba na double.

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