扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你这是在declare语句里忘了写alias子句了。。。
创新互联公司专注于企业营销型网站、网站重做改版、安平网站定制设计、自适应品牌网站建设、H5页面制作、商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为安平等各大城市提供网站开发制作服务。
Private Declare Function LogonUser Lib "advapi32.dll" Alias "LogonUserA" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Boolean
还有你在vb里最好要也像C#一样,用dllimports特性而不是declare来引用api函数。需要引入
Imports System.Runtime.InteropServices
命名空间。用尖括号开头,如下:
DllImport("advapi32.dll")
Public Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Boolean
End Function
当然你这里注意下logonUser函数的返回值只有在这个函数执行失败的时候才会返回false
.NET 类库生成的 dll 只要在你的项目引用里添加对 dll 的引用即可。图中是调用普通 dll 的方法,那个 dll 通常是用 C++ 写的非托管库。
VB.net语言
1、创建组件定义
新建一个Probject,在代码中写入:
Public Interface IDemo
Function Test() As String
End Interface
2、实现组件定义
新建一个Probject,添加对上述Probject的引用后,在代码中写入
Public Class Demo
Implements IDemo.IDemo
Public Function Test() As String Implements IDemo.IDemo.Test
Test = "Hello World!"
End Function
End Class
3、编译出Demo.dll组件
4、使用.net的工具 Visual Studio .Net 2003 Command Prompt,输入以下命令
Regasm Demo.dll /tlb:Demo.tlb
把Demo.dll注册为一个com对象(这个com对象不等同于普通的用VB编写的Com对象),并导出类型库Demo.tlb
5、新建一个VB工程,添加对Demo.tlb和IDemo.tlb的引用
6、定义两个全局变量
Dim vbDemo As Demo.Demo
Dim vbIDemo as IDemo.IDemo
7、在Form_Load事件中初始化
'初始化实体类
Set vbDemo = New Demo.Demo
'将实体类引用到抽象类
Set vbIDemo = vbDemo
8、然后,我们就可以用 vbIDemo.Test 这样的方法了
“找不到 DLL 入口点”,这种问题一般都是函数名的声明不正确。
比如把函数名写错(要区分大小写的)、dll文件名写错等。
你的 nxmi.dll 是哪来的?
一般的“第三方DLL文件”,都不会给你提供A版和W版的函数接口吧!
你把 Alias "BizbussA" 删除,再运行试试。
或者,把这个DLL文件发出来,我给你看看函数名是否正确。
方法如下:
1、打开例1.1创建的工程。
2、选择窗体Form1并双击该窗体,出现窗体的调事件的过程代码体。
3、在窗体调用的过程代码体中编制如下过程代码:
Private Sub Form_Load()
Form1.Width = 4860
Form1.Height = 2520
End Sub
4、设置窗体Form1的SartUpPosition属性为2-屏幕中心,这样运行窗体可以发现,屏幕的大小与例1.6中通过属性设置的大小是一致的。
DLL在生成后,里内的函数会有变化,所以你要先用软件exesc查一下它变化的结果是什么
之后这样写,我是用C#写的,对你应该有帮助
[DllImport("facecom.dll", EntryPoint = "?fnfacecom@@YAHXZ")]
public extern static int fnfacecom();
?fnfacecom@@YAHXZ
这个就是那个就是在软件里查到的改变后的结果,你写在入口号处就可以了
这个我用过了没问题
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流