关于vb.net中dll的调用问题

hope1234567hope 2006-12-27 05:57:51
我在做一个关于条码的程序,需要调用厂商提供的dll。他们提供了一个vb的例子。如下(只举下面的例子):
Private Declare Function B_CreatePrn Lib "WINPPLB.DLL" (ByVal selection As Long, ByVal filename As String) As Long

rivate Sub Command1_Click()

''''''WinPPLB.DLL Version 2.7BW'''''''''''
Print B_CreatePrn(1, "a22")

厂商提供的'WinPPLB.DLL我注册不成功,只有把它放在厂商提供给我的vb例子程序的目录下才可以运行。不知道为什么?

我现在用vb.net些,可就是不能正确调用。因为我是新手,所以希望大家帮助!
我在工程中 新建了一个模块:写了
Module Module1
Declare Function B_CreatePrn Lib "WINPPLB.dll" (ByVal selection As Long, ByVal filename As String) As Long
End Module
然后在 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As Long
a = B_CreatePrn(1, "a22")
End Sub
但调用就出错。我也不知道我这样写正不正确?

我这样写它的错误提示如下:对 PInvoke 函数“WindowsApplication4!WindowsApplication4.Module1::B_CreatePrn”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

请众位打侠帮忙!!万分感谢!
...全文
352 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowfox007 2007-01-10
  • 打赏
  • 举报
回复
VB与VB.net的相同数据类型所占用的字节大小有的是有区别的,VB中的Long是四个字节,而VB.net中的Long是8个字节,而VB.net中的Integer是四个字节,因此VB中的声明在VB.Net中应该做一些修改.
Knight94 2007-01-10
  • 打赏
  • 举报
回复
to 厂商提供的'WinPPLB.DLL我注册不成功,只有把它放在厂商提供给我的vb例子程序的目录下才可以运行。不知道为什么?

这是标准的动态库,并不需要注册。

在vb.net中,可以如下声明,并不需要单独创建module
Imports System.Runtime.InteropServices

<DllImport("WINPPLB.dll")> _
Private Shared Function B_CreatePrn (ByVal selection As Int32, ByVal filename As String) As Int32
End Function
xxelement 2006-12-27
  • 打赏
  • 举报
回复
那个dll是用什么写的,如果是.net应该是可以直接add reference的,但是看到你的函数申明,应该不是...可能是C写的吧...如楼上的,看看参数类型是否正确.
水如烟 2006-12-27
  • 打赏
  • 举报
回复
Declare Function B_CreatePrn Lib "WINPPLB.dll" (ByVal selection As Int32, ByVal filename As String) As Int32
水如烟 2006-12-27
  • 打赏
  • 举报
回复
至少先将Long改为Integer

16,718

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧