PB9调用dll的时候问题比较怪异,同样的代码在xp下面使用vs2010编译就可以了。
在win7下面使用vs2015编译出来就不行。注:已经设置支持xp了。
使用def导出接口
Module-Definition File (.def)
VERSION major[.minor]
LIBRARY "dllName"
EXPORTS merchantBind @1
|
引用DLL
静态方式
#include "..\\xxx\xxx.h"
#ifdef _DEBUG #pragma comment( lib,"..\\debug\\xx.lib" ) #else #pragma comment( lib,"..\\release\\xx.lib" ) #endif
|
动态方式
进程调用 LoadLibrary(或 AfxLoadLibrary)以显式链接到 DLL
C#调用win32 Dll
参考文章
msdn marshal api
C++ DLL的返回值,安全的做法是分配一个全局 char 数组,把要返回的 char * 复制到这个 char 数组中,
class demoClass { [DllImport("demo.dll", EntryPoint = "demo_getVersion", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)] private static extern IntPtr demo_getVersion();
[DllImport("demo.dll", EntryPoint = "demo_fun1", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)] private static extern IntPtr demo_fun1(string param);
public static string getVersion() { IntPtr intPtr = demo_getVersion(); string result = Marshal.PtrToStringUni(intPtr); return result; }
public static string merchantScanBarcodePay(string param) { IntPtr intPtr = demo_fun1(param); string result = Marshal.PtrToStringUni(intPtr); string ss = result; return ss; } }
C++ 接口 wchar_t* __stdcall demo_getVersion(); wchar_t* __stdcall demo_fun1(wchar_t* param);
|
c# 类型对照