Win32程序如下:
#ifdef A_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
extern "C" DLL_API void EC_GetGin(int* icard);
void EC_GetGin(int* icard)
{
icard = 1;
}
C# 代码如下:
[DllImport("test.dll", EntryPoint = "EC_GetGin", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern void EC_GetGin(ref int icard);
int icard = 0;
EC_GetGin(ref icard);
为什么 C# 不能得到 1 ?
C 代码修改指针,而不是写入指针指向的变量。将其更改为
void EC_GetGin(int* icard)
{
*icard = 1;
}
如果将参数声明为out
而不是ref
,则 C# 代码会更干净。
在 C 代码中,您不会在内存位置中设置值,而是在icard
中更改指针(您让icard
指向内存位置1
(。
更改要使用的内存位置icard
点中的值
*icard = 1;
您需要修改值,将*
与指针一起使用以获取值。
void EC_GetGin(int* icard)
{
*icard = 1;
}