Nie przekazuje adresu parametru do funkcji w dll (c++)

0

Cześć, zapewne robię coś źle, ale nie wiem, co.
Mam funkcję w dll napisaną w c++:

__declspec(dllexport) void __stdcall _func1(double *p1, double *p2)

Wywołanie w C#:

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

//a potem:
double param2 = 0; //wartość jest nieważna
func1(ref param1, ref param2); //param1 pochodzi z parametru, param2 jak widać jest zmienną lokalną

Problem jest taki, że param2 jakby nie jest przekazywane. Tzn. jeśli zrobię w c++:

cout << p2;

to wyświetli mi "00000000". Skoro parametr jest zadeklarowany i nawet zdefiniowany w C#, to czemu go nie ma w C++? Parametr 1 jest całkowicie ok.

0
#include <iostream>
using namespace std;

extern "C" __declspec(dllexport) void __stdcall func1(double *p1, double *p2)
{
	cout << p1 << " " << *p1 << endl;
	cout << p2 << " " << *p2 << endl;
	*p1 = 44;
	*p2 = 55;
}
using System;
using System.Runtime.InteropServices;

class Test
{
	[DllImport("lib.dll")]
	static extern void func1(ref double p1, ref double p2);

	static void Main()
	{
		double p1=2, p2=3;
		func1(ref p1, ref p2);
		func1(ref p1, ref p2);
	}
}
c:\pp\myprogs\delme>cl lib.cpp /LD /EHsc
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.319 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

lib.cpp
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:lib.dll
/dll
/implib:lib.lib
lib.obj
   Creating library lib.lib and object lib.exp

c:\pp\myprogs\delme>csc test.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.


c:\pp\myprogs\delme>test
0013F400 2
0013F408 3
0013F400 44
0013F408 55

c:\pp\myprogs\delme>
0

Najpierw miałem to __declspec w extern c, ale tak:

extern "C"
{
    _declspec(dllexport)......
}

Jest różnica, jeśli napiszę funkcje w klamrze, a jeśli przed?
Potem przerzuciłem te eksporty do pliku DEF, ale nadal nie pomogło.

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