动态dll还是需要vs不是vscode
C++生成动态链接库 教程 教训,这个h和dll文件放置位置是在代码这个文件夹,不是debug文件夹。。。
https://blog.csdn.net/shuimanting520/article/details/78715615
VS查看dll声明的函数
https://blog.csdn.net/weixin_34234823/article/details/86258541
VS的Developer Command Prompt命令窗口
dumpbin /exports D:\workplaceXuzhou\exploreCjiajia\Cjiajia\panny_dll_test\panny_dll_test\panny_dll.dll
的确有
[email protected]@YAHHH@Z = @ILT+545([email protected]@YAHHH@Z)
c#调用c++的dll
下面这个问题是c#不能直接调用c++的dll
it is a valid assembly or com component
无法找到入口
最终调用 CallingConvention = CallingConvention.Cdecl这个不能漏掉。。
[DllImport(“panny_dll.dll”, EntryPoint = “[email protected]@YAHHH@Z”, CallingConvention = CallingConvention.Cdecl)]
public static extern int add(int a, int b);
对 PInvoke 函数“WpfApplication1!WpfApplication1.MainWindow::add”的调用导致堆栈不对称。原因可能
解决方案:CallingConvention = CallingConvention.Cdecl这个不能漏掉
一般在dll里面函数 用dllexport 类型对应就行,比如 int 对应Int32 char*对于String
BSTR ——— StringBuilder
LPCTSTR ——— StringBuilder
LPCWSTR ——— IntPtr
handle———IntPtr
hwnd———–IntPtr
char *———-string
int * ———–ref int
int &———–ref int
void *———-IntPtr
C#调用的dll默认是debug文件夹
函数名称发生变化的原因是没有 模块头文件
序号就是第几个函数的意思
LIBRARY “USER_COM”
EXPORTS
OpenCOM @ 1
COM_Send @ 2
COM_RX @ 3
Close_COM @ 4
extern “C” USER_COM_API bool OpenCOM();
extern “C” USER_COM_API int COM_Send(unsigned char cmd, unsigned char data1, unsigned char data2);
extern “C” USER_COM_API int COM_RX(uint8_t* Rx_buff);
extern “C” USER_COM_API void Close_COM();
测试
dumpbin /exports D:\workplaceXuzhou\exploreCjiajia\Cjiajia\panny_dlldef\Debug\panny_dll.dll
结果