c++写的DLL,怎么在c#中声明 20C

c++给的接口说明是:
extern "C" __declspec(dllexport) void test6(ULONG64* baseaddr,ULONG64 pid,WCHAR* moudleName);

extern "C" __declspec(dllexport) BOOLEAN _stdcall setCard(UCHAR* strCardId, ULONG cardLen);

如何在c#里面调用这两个函数?

dll

4个回答

[DllImport("你的c++dll")]
private static extern void test6(ref long baseaddr, long pid, StringBuilder moudleName);
[DllImport("你的c++dll")]
private static extern bool setCard( StringBuilder strCardId,long cardLen);

hcli168
waesaeasea test6第三个参数要求是unicode,我调用得时候说ref得参数不能为空
接近 2 年之前 回复

声明以后如何调用呢?我调用test6得时候提示第一个参数不能为空。第一个参数是我需要调用DLL获取得值。

原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。声明以后提示我这个错误。

开始写c++:
把和项目同名的.h文件和.cpp文件清空,添加如下代码:

//在头文件中添加
#ifdef WIN32PROJECT1_EXPORTS
#define WIN32PROJECT1_API __declspec(dllexport)
#else
#define WIN32PROJECT1_API __declspec(dllimport)
#endif

extern "C" WIN32PROJECT1_API void _stdcall Add(int a,int b);

//在源文件中添加
#include "stdafx.h"
#include "Win32Project1.h"
#include

WIN32PROJECT1_API void _stdcall Add(int a,int b)
{
std::cout << a + b << std::endl;
}

hcli168
waesaeasea 看懂问题了吗?大佬
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问