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?