/// <summary> /// 批量创建收款单和应收单 /// </summary> /// <param name="baseInfo"></param> /// <param name="param"></param> /// <returns></returns> public string CreateKingdeeBatch(string url, object baseInfo, Dictionary <string, object> param) { string dllPath = AppDomain.CurrentDomain.BaseDirectory + "/bin/Kingdee/KingdeeLib.dll"; string className = "KingdeeLib.Kingdee"; string result = string.Empty; using (var lib = new DllInvoke(dllPath, className)) { //设置接口地址 lib.Invoke("SetUrl", new Type[] { typeof(string) }, new object[] { url }); //组织参数创建单据 Type[] type = new Type[] { typeof(object), typeof(Dictionary <string, object>) }; object[] ps = new object[] { baseInfo, param }; result = lib.Invoke("CreateReceiptReceivableByBatch", type, ps).ToString(); } return(result); }
/// <summary> /// 加载dll文件,并返回数据 /// </summary> /// <param name="funcname">调用dll的函数名</param> /// <param name="k">自定义数组长度</param> /// <param name="userCode">传入的数据</param> /// <returns></returns> private byte[] loadDllFile(string funcname, int k, string userCode) { //int hModule = DllInvoke.LoadLibrary(@"D:\git\wpfPlayerUI\Wpf实例\bin\Release\USBJOY_DLL.dll"); //IntPtr intPtr = DllInvoke.GetProcAddress(hModule, "GET_2DOF"); //1. 动态加载C++ Dll int hModule = DllInvoke.LoadLibrary(@"md5.dll"); //if (hModule == 0) return null; //2. 读取函数指针SQ_GET_2DOF IntPtr intPtr = DllInvoke.GetProcAddress(hModule, funcname); //3. 将函数指针封装成委托 PSQ_GET_DATA addFunction = (PSQ_GET_DATA)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(PSQ_GET_DATA)); //4. 测试 byte[] aa = new byte[k]; // this.Dispatcher.Invoke(new Action(() => {}));使用同步的方法来使用函数委托 this.Dispatcher.Invoke(new Action(() => { addFunction(userCode, ref aa[0]); })); //DllInvoke.FreeLibrary(hModule);//释放Dll文件 return(aa); }
/// <summary> /// 动态调用Dll以及DLL里面的方法 /// </summary> /// <param name="funcname"></param> /// <param name="k"></param> private byte[] USBJOY_DLL(string funcname, int k) { //int hModule = DllInvoke.LoadLibrary(@"D:\dll\usbjoy-alldof\vs2010\x64\Release\USBJOY_DLL.dll"); //IntPtr intPtr = DllInvoke.GetProcAddress(hModule, "GET_2DOF"); //1. 动态加载C++ Dll int hModule = DllInvoke.LoadLibrary(@"../../Release/USBJOY_DLL.dll"); if (hModule == 0) { return(null); } //2. 读取函数指针SQ_GET_2DOF IntPtr intPtr = DllInvoke.GetProcAddress(hModule, funcname); //3. 将函数指针封装成委托 PSQ_GET_2DOF addFunction = (PSQ_GET_2DOF)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(PSQ_GET_2DOF)); //4. 测试 byte[] a = new byte[k]; // this.Dispatcher.Invoke(new Action(() => {}));使用同步的方法来使用函数委托 this.Dispatcher.Invoke(new Action(() => { addFunction(ref a[0]); })); //DllInvoke.FreeLibrary(hModule);//释放Dll文件 return(a); }
private void USBJOY_DLL(string funcname, int k) { //1. 动态加载C++ Dll int hModule = DllInvoke.LoadLibrary(@"../../Release/USBJOY_DLL.dll"); if (hModule == 0) { return; } //2. 读取函数指针SQ_GET_2DOF IntPtr intPtr = DllInvoke.GetProcAddress(hModule, funcname); //3. 将函数指针封装成委托 PSQ_GET_2DOF addFunction = (PSQ_GET_2DOF)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(PSQ_GET_2DOF)); //4. 测试 byte[] a = new byte[k]; addFunction(ref a[0]); for (int i = 0; i < a.Length; i++) { Console.WriteLine(i + ":" + a[i]); } //DllInvoke.FreeLibrary(hModule); //释放Dll文件 }