C 与VB接品API

PP_Sky 2008-11-18 10:47:03
我写了一个C的DLL,函数定义如下
extern "C" DWORD __declspec(dllexport) XPP( LPSTR pszDeviceName, int x, int y, int barcode_height, LPCSTR pszLabel)

在VB中调用,引用为
Private Declare Function XPP Lib "XDLL.dll" ( _
ByVal pszDeviceName As String, ByVal X As Long, ByVal Y As Long, _
ByVal height As Long, ByVal pszLabel As String) As Long

调用时,出现"DLL调用约定出错"

请问各位高手,有没有哪写错了?
...全文
108 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cauly123 2008-11-19
  • 打赏
  • 举报
回复
555我明明也提到了stdCall的问题-_-
Cauly123 2008-11-19
  • 打赏
  • 举报
回复
我晕啊
这个问题我也遇到过,最后无疾而终,反正成品能用
VB的字符串传到VC好像没什么问题,只是好像……传递到c就肯定有问题了,但是这个问题在传递中不会出现DLL调用约定出错,因为传递的肯定是指针,里面的内容和它没有关系
PP_Sky 2008-11-19
  • 打赏
  • 举报
回复
to no1gentlebreeze:
试了,还是一样

问题是我的代码,只要不是调试的就可以正常运行。而且结果正确。
一在VB中调试,就出这个错,但DLL的调用是正确的.......


是不是VB的字符串传到VC有什么问题呢?
Cauly123 2008-11-19
  • 打赏
  • 举报
回复
ByVal XX As String的,都改成Byval XX as Long试试 因为所有api参数都可以这么声明
还有我记得好像在我看到过的C声明中好像都有stdCall字样具体不知道楼主参考下
另外看看.def文件里有没有出错……
我只用汇编做过dll给vb用过……所以经验还不足 只能想到这些
PP_Sky 2008-11-19
  • 打赏
  • 举报
回复
搞掂了,谢谢楼上两位。

extern "C" 不是 __stdcall...

哈哈
PP_Sky 2008-11-19
  • 打赏
  • 举报
回复
__declspec(dllexport) 是dll导出,与约定无关, extern "C" 就是 __stdcall了。

我的问题是:这个函数,在VB编译成.EXE时可以调用正确。
不过在VB的debug时,老说约定不对。
of123 2008-11-19
  • 打赏
  • 举报
回复

6 楼正解。用 __stdcall 替换 __declspec。VB 不能直接支持 __declspec 调用约定。

否则,就必须在模块中做一个类,如下例:

Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be
' explicitly defined. CallingConvention.Cdecl must be used since the stack
' is cleaned up by the caller.
' int printf( const char *format [, argument]... )
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
format As String, i As Integer, d As Double) As Integer
End Function
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
format As String, i As Integer, s As String) As Integer
End Function
End Class 'LibWrap
Public Class App
Public Shared Sub Main()
LibWrap.printf(ControlChars.CrLf + "Print params: %i %f", 99,
99.99)
LibWrap.printf(ControlChars.CrLf + "Print params: %i %s", 99, _
"abcd")
End Sub 'Main
End Class 'App
supergreenbean 2008-11-19
  • 打赏
  • 举报
回复
你的C函数并非使用__stdcall调用约定,你改下你C函数声明,加上__stdcall即可
PP_Sky 2008-11-18
  • 打赏
  • 举报
回复
to SYSSZ:
我写的是extern "C"的API,不是COM。没有DllRegister入口可以注册,谢谢。
SYSSZ 2008-11-18
  • 打赏
  • 举报
回复
如果你用C写了Dll,引入VB的常用方法是:
工程---引用---浏览---找到你那个dll--确定,如果这时你的Dll出现在引用对话框,对象浏览器有相应的类名,则引用成功,这时按使用类的方法使用就行了.
1,mruxdzip.exe
在菜单上最近打开文件的历史记录控件(1453KB)
2,applogger.zip
具有删除到回收站、读写 INI 文件、计算剩余磁盘空间,复制文件和添加到 Windows 文档列表(57KB)
3,ccrpbd10.zip
Windows 游览对话框控件(75KB)
4,ccrpdrg.zip
增强了的列表框控件(71KB)
5,ccrpfd.zip
Windows 文件对话框控件,功能强劲,可制作出 VB 的文件对话框(95KB)
6,ccrphky.zip
键盘控件(69KB)
7,ccrpprg.zip
进程杆控件(150KB)
8,ctlist.exe
一个增强的 ListView 控件(376KB)
9,ctlistbar.exe
Microsoft Outlook 风格的列表框控件(287KB)
10,cttree.exe
一个增强的 TreeView 控件(424KB)
11,dprogressw.exe
DameWare 公司出品进程杆控件(177KB)
12,proplistw.exe
DameWare公司出品类似 VB 中的属性列表控件(291KB)
13,buttnbar6.zip
Outlook 列表框控件(700KB)
14,fsi.zip
系统信息控件(24KB)
15,fsshr20d.exe
应用程序交换数据控件,不需要使用 DDE,COM 和剪贴板(289KB)
16,gbarocx.zip
进程杆控件(171KB)
17,graphic.zip
不需要调用 API ,创建一个 Office Ani 精灵助手(50KB)
18,ctlbar.ZIP
用过Oicq的用户,一定熟悉这个控件(59KB)
19,big2gb.zip
一个BIG5码<=>GB码互换的完全免费的ActiveX控件(81KB)
20,capscreen.zip
这是一个屏幕拷贝的控件,可以实现全屏的拷贝并支持另存为位图类型的文件 (28KB)
21,digital.zip
能够以液晶字体方式显示数字的一个小控件(15KB)
22,eqpro.zip
一个调整系统音量的控件,控制音量包括;很方便地控制,控件也很小巧(15KB)
23,flatbar.zip
一个工具栏控件,可变VB5.0的工具栏为Office或IE类型的平面工具栏(27KB)
24,lyftools.zip
这是一个封装了500多个Windows API的控件(229KB)
25,masflc.zip
一个用来播放 FLC,FLI 的 3DS 动画格式控件(60KB)
26,xzipdemo.zip
Xceed Zip控件 (98KB)
27,lfbb.zip
兰花打印控件(预览及打印输出,它支持多列,文本自动换行,页头和页尾,表格及段落)(186KB)
28,keyboard.zip
检测键盘按键控件(13KB)
29,winapi.zip
这是一个封装了部分Windows API的控件(例如:发EMail、改变分辨率等)(92KB)
30,dbdemo.zip
3D立体按钮控件(138KB)
31,spelltxt.zip
一个文档拼音检查的控件(337KB)
32,swflash.zip
播放的Flash文件的控件(160KB)
33,185.zip
EasySound 一个封装了DirectSound API的控件 (565KB)
34,157.zip
子分类控件,包含控件源码(44KB)
35,132.zip
MikoUtil系列控件(184KB)
36,109.zip
GB-Big5语言编码转换的控件源码(39KB)
37,108.zip
微软的DirectX 7 for VB开发库文件(187KB)
38,11.zip
MsgHook 用于子分类、截获消息的控件(147KB)
39,c1.zip
Windows 9x注册表控件(35KB)
40,c8.zip
只要点击就可以打开超连接的控件(10KB)
41,c9.zip
GIF98(24KB)
42,c10.zip
sysmenu(9KB)
43,c11.zip
小型控件集(40KB)
44,c12.zip
anigif(40KB)
45,cst.zip
圆盘仪表控件 V3.1(4143KB)
46,EZX.zip
让你能在VB中使用DirectX的控件,附例子和源代码(1619KB)
47,NCTDesignBox.exe
NCTDesignBox 1.01(513KB)
48,c_arp.zip
Activereport 1.1的破解文件(1KB)
49,clock.zip
显示时间和日期信息控件(5KB)
50,InputeDate.zip
日期输入框控件(13KB)
51,api21.zip
封装了500多个Windows API的控件,覆盖了网络、系统、界面、多媒体、图形、文字等各个方面(261KB)
52,ARRegistry.zip
访问系统注册表的控件(25KB)
53,isysinfo.zip
是一个可以获得系统信息的ActiveX控件,该控件是由VB5.0编写,使用这个控件可以获得系统的内存大小、CPU类型、显示器的分辩率、颜色数系统中各个驱动器、CPU占用率、Windows版本等信息 (19KB)
54,MsgHoo32.zip
同样是Windows消息处理控件(22KB)
55,MsgBlst32.zip
这是一个拦截、处理消息的控件(18KB)
56,threed32.zip
一个3D控件(73KB)
57,vfoutbar.zip
这里还有另一个控件 OutLook 风格的 BAR(39KB)
58,ovalbutton.zip
椭圆形按钮控件(8KB)
59,3dbdemo.zip
3D立体按钮控件(138KB)
60,tubPrinter.zip
可直接打印DataGrid,ListView,MsFlexGrid(53KB)
61,shape.zip
椭圆、三角、星...形按钮控件(131KB)
62,command.zip
千千平面按钮(35KB)
63,Chat.zip
Chat控件(16KB)
1,cdrecorder.ZIP 一个用API函数编写的CD抓轨程序(5KB)2,mci.ZIP MCI的应用示例,包括播放WAV、MIDI文件和播放CD及将CD中的曲目转录为WAV文件等(5KB)3,wavplay.ZIP 播放WAV文件的演示(23KB)4,vbpiano.ZIP 一个模拟钢琴的源程序,(需要Threed32.ocx)(75KB)5,videocap.ZIP 一个视频捕捉程序,安装了视频捕捉设备的朋友可以下载来看一看(12KB)6,mixer.ZIP 一个非常完全的waveOut程序,包括了一个waveOut类和使用类的范例,这个范例获得Windows下所有的wave输入输出设备的名称以及属性(22KB)7,agent1.ZIP Microsoft Agent范例程序,你的系统中必须已经安装了Agent2.0以上版本(2KB)8,sound_cap.ZIP 利用DirectSound和MS Agent建立的一个语音复读机。读音的捕捉和回放由DirectSound实现,MS Agent实现标准朗读(5KB)9,mmfile_play.ZIP 利用Windows API函数实现多媒体文件得播放,可以播放MPG、AVI、MDI、WAV等文件以及文件信息(128KB)10,midi_drum.ZIP VB鼓机的音序器(26KB)11,flashsamp.ZIP 这是一个介绍如何控制Flash控件显示Flash文件的程序(62KB)12,m032.ZIP 定时计时器(530KB)13,m031_plmaker.ZIP 播放列表生成器(4KB)14,m029_speech.ZIP 程序会朗读(2KB)15,m028_mp3.ZIP 简单的mp3播放器(10KB)16,m027_mp3test.ZIP MP3播放器(3KB)17,m025_zm016.ZIP 一个音量控制小程序(6KB)18,m024_videocap.ZIP 视频捕捉程序(12KB)19,m023_mcd.ZIP CD播放器(23KB)20,m022_mmedia.ZIP 多媒体播放器(3KB)21,m021_Play33.ZIP 电子琴(9KB)22,m020_vbamp.ZIP WINAMP(141KB) 23,m019_testsc.ZIP 声卡测试程序(3KB)24,m018_cdaudio.ZIP CD播放机(4KB)25,m016_aviplay.ZIP 利用Windows API 播放AVI文件(3KB)26,m015.ZIP 一个音量控制小程序(7KB)27,m014.ZIP 播放.mid格式的背景音乐,你可以在此基础上增加其它功能(13KB) 28,m013.ZIP 播放.WAV文件,并显示其波形(6KB)29,m012.ZIP 可同时8个Wave文件混音(338KB) 30,m011.ZIP 能混合很多种声音的好程序(14KB)31,m010.ZIP 播放Wave, Midi和Avi文件(7KB)32,m004.ZIP 多媒体控件的使用,自带EXE(8KB)33,m003.ZIP MULTIMEDIA MCI 多媒体控件的应用,自带EXE(3KB)34,m002.ZIP 可以播放mp3的dll,并附有一个完整的示例程序(可以显示播放时间等,功能强大),自带现成的EXE文件,非常Cool(82KB)35,m001.ZIP 使用API函数播放wav文件(350KB)36,anidemo.ZIP 使用windows api演示动画的例子(288KB) 37,anic.ZIP 动画光标的例子(4KB)38,waveplay.ZIP 播放wave的例子(350KB) 39,jpegvu.ZIP 显示jpeg文件的例子(116KB)40,g

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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