问题描述
不用引用的方法,想用LoadLibrary免注册调用大漠插件,请大神们帮忙!大漠插件com接口:dm.dmsoftdm=CreateObject("dm.dmsoft")我的代码如下:方案一:DeclareFunctionLoadLibraryLib"kernel32"Alias"LoadLibraryA"(ByVallpLibFileNameAsString)AsIntegerDeclareFunctionFreeLibraryLib"kernel32"Alias"FreeLibrary"(ByValhLibModuleAsInteger)AsIntegerDeclareFunctionGetProcAddressLib"kernel32"Alias"GetProcAddress"(ByValhModuleAsInteger,ByVallpProcNameAsString)AsIntegerDimhLibAsLong=LoadLibrary("F:dm.dll")DimapiaddressAsInteger=GetProcAddress(hLib,"InitCMPPAPI")///////////////////代码是改别人调用插件方法,InitCMPPAPI这个应该不对。/////////////////////MsgBox(apiaddress)这个显示为0找到了函数地址apiaddress,下面怎么写。方案二:大漠插件有个DmReg.dll,引导免注册调用。'PrivateDeclareFunctionSetDllPathWLib"f:DmReg.dll"(ByValpathAsString,ByValmodeAsLong)AsLongDimdm_ret=SetDllPathW("f:dm.dll",0)Dimdm=CreateObject("dm.dmsoft")dm.MoveTo(100,100)调试错误:对PInvoke函数“svchost!svchost.Form1::SetDllPathW”的调用导致堆栈不对称。原因可能是托管的PInvoke签名与非托管的目标签名不匹配。请检查PInvoke签名的调用约定和参数与非托管的目标签名是否匹配。本人菜鸟,请大神们解答时贴出代码,真诚地感谢!
解决方案
解决方案二:
我现在在学VB,觉得很难啊,怎样才能快速学会VB呢?
解决方案三:
http://bbs.csdn.net/topics/390984668不注册调用com,vb.net应该好处理,vb6的我已测试好了,还没发出来,得整理下
解决方案四:
我用C#(vs2010)实现了免注册调用(实际上是实现了自动注册,不用手动注册了),你用VB.net应该差不多。我的方法如下:1、在开始菜单vs文件夹中vstools里打开VisualStudio命令提示,运行如下命令>tlbimpD:dm.dll/out:D:dmnet.dll生成dmnet.dll2、然后在程序里引用dmnet.dll,引用后需要把dmnet.dll的属性窗口中的“嵌入互操作类型”改为false,还要把dm.dll复制到项目的debug目录下;3、然后在窗体类代码的开头添加注册语句,然后就可以直接实例化调用了,如下:publicpartialclassForm1:Form{[DllImport("dm.dll")]publicstaticexternintDllRegisterServer();//注册时用inti=DllRegisterServer();inthwnd;privatevoidbutton1_Click(objectsender,EventArgse){dmsoftClassdm=newdmsoftClass();MessageBox.Show(string.Format("版本号:{0}",dm.Ver()));hwnd=dm.FindWindow("",textBox4.Text);//hwnd=dm.GetMousePointWindow();MessageBox.Show(string.Format("窗口ID:{0}",hwnd.ToString()));}}
注意绑定窗口后要记得解绑,不解绑的话,某些绑定模式下窗口不会接受鼠标键盘的输入4、另外,据网上高手说还需要在程序退出前手动释放dm对象(不会手动释放)。本人也是菜鸟,这点我也不太清楚。放出释放代码(来自网上):System.Runtime.InteropServices.Marshal.ReleaseComObject(dm);dm=null;GC.Collect();
解决方案五:
有图有真相
解决方案六:
>tlbimpD:dm.dll/out:D:dmnet.dll生成dmnet.dll不做这步可以吗
解决方案七:
那你就手动注册大漠插件,在项目里引用com组件dm.dll