API函数调用问题,请高手指教

ysk2006110 2011-11-07 01:26:16
我在模块里定义了这些函数,在窗口中如何调用?
'启动服务,打开串口,初始化Modem, 0为失败,非0为成功
'校验位, EvenParity :0,MarkParity:1,NoParity:2,OddParity:3,SpaceParity,4
'停止位 OneStopBit 0,OnePointFiveStopBits:1,TwoStopBits 2
'流控:NoFlowControl:0, CtsRtsFlowControl:1, CtsDtrFlowControl:2, DsrRtsFlowControl:3, DsrDtrFlowControl:4, XonXoffFlowControl:5
'最后一个参数csca为短信中心号码,如果直接用卡内已存的短信中心号码则用"card"(小写)
Public Declare Function SMSStartService Lib "SMSDLL.dll" (ByVal nPort As Long, ByVal BaudRate As Long, ByVal Parity As Integer, ByVal DataBits As Integer, ByVal StopBits As Integer, ByVal FlowControl As Integer, ByVal csca As String) As Long


这样可以对吗?
SMSStartService 1, 115200, 2, 8, 0, 0, card

这个就不知道怎么调用了
Public Type SMSMessageStruct
Msg(0 To 255) As Byte '//短信内容
PhoneNo(0 To 31) As Byte '//对方手机号码
ReceTime(0 To 31) As Byte '//接收时间
End Type

Public Declare Function SMSGetNextMessage Lib "SMSDLL.dll" (ByRef smg As SMSMessageStruct) As Long

请高手指教,最好能给个源码,谢谢
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 ysk2006110 的回复:]
这个就不知道怎么调用了
Public Type SMSMessageStruct
Msg(0 To 255) As Byte '//短信内容
PhoneNo(0 To 31) As Byte '//对方手机号码
ReceTime(0 To 31) As Byte '//接收时间
End Type

Public Declare Function SMSGetNextMessage Lib "SMSDLL.dll" (ByRef smg As SMSMessageStruct) As Long

请高手指教,最好能给个源码,谢谢
[/Quote]

定义一个数组转字符串函数'假设返回的是ansi编码
private function Conv(a() as byte)as string
dim i as long
for i=lbound(a) to ubound(a)
if a(i)=0 then
exit for
else
Conv=Conv & chr(a(i))
end if
next
end function

调用位置

dim a as SMSMessageStruct'定义一个结构
SMSGetNextMessage a

dim sContent as string
dim Phone as string
dim sTime as string

scontent=conv(a.msg)
Phone=conv(a.PhoneNum)
sTime=conv(a.recetime)
ysk2006110 2011-11-07
  • 打赏
  • 举报
回复
告诉我怎么去调用这些函数就可以了,API我用不来,就是VB窗口中有个COMMAND1 设为“启动” 在这按钮里,如何变成调用这个SMSStartService函数,急啊,跪求
jhone99 2011-11-07
  • 打赏
  • 举报
回复
Public Type SMSMessageStruct
Msg(0 To 255) As Byte '//短信内容
PhoneNo(0 To 31) As Byte '//对方手机号码
ReceTime(0 To 31) As Byte '//接收时间
End Type
****************
这个是自定义的数据类型
贝隆 2011-11-07
  • 打赏
  • 举报
回复
这个是硬件配套的DLL文件,没有这个Dll文件,大家怎么帮你???
3.1 程序说明 当启动程序Try.EXE调用SetMouseHook()后,Windows系统将MouseHook.DLL映射入每一个有鼠标消息传入的进程地址空间。映射时将用DLL_PROCESS_ATTACH作为参数fdwReason的值调用DllEntryPoint(),DllEntryPoint()调用ModifyCall()搜索该进程对TextOutA()的调用并将其替换为调用MyTextOut()。这样当该进程调用GDI32.DLL的TextOutA()时实际调用的却是MouseHook.DLL的MyTextOut()。 ModifyCall()利用进程的HINSTANCE(也即HMODULE,对于Win32而言它们是一回事,即装载基址)找到DOS文件头结构IMAGE_DOS_HEADER,再利用IMAGE_DOS_HEADER中的e_lfanew成员找到Win32的IMAGE_NT_HEADERS结构,该结构含有动态连接所需的信息。IMAGE_NT_HEADERS中的OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]含有DLL函数引入表的RVA(相对虚拟地址)和大小。搜索该表所指向的DLL引入函数地址,值与GetProcAddress()返回值相同的单元就是对应的DLL函数地址存放单元,将MyTextOut()地址写入即可。详细情形参阅有关PE文件格式的说明和Winnt.h中的定义。 当启动程序调用UnMouseHook()时,过程与之类似,只是此时是为了卸下WH_MOUSE全局钩子并恢复原来对TextOutA()的调用。 此处设置WH_MOUSE全局钩子的目的只是利用全局钩子的特性将MouseHook.DLL“挤进”其它进程的地址空间,因此钩子过程MouseProc()很简单,只是传递一下消息而已。 两个#pragma data_seg()编译器指令是为了定义一个名为.MouseHook的数据段(更确切地说是数据节),该数据段在MouseHook.DEF中被说明为共享,之所以如此是因为各个进程空间中的MouseProc()需要该钩子的句柄hMouseHook,而hMouseHook只在启动程序Try.EXE调用SetMouseHook()时得到一次,因此只能放在共享内存中,否则编程将变得复杂起来。至于每个进程中被替换下来的TextOutA()地址,是属于单个进程空间的,故放在局部数据中,Windows系统会为每次映射使用不同的内存。实际上,TextOutA()的引入地址在所有的进程中都是相同的,这是因为为了页面管理的简单和进程切换的效率,对每个进程Windows 9x将系统DLL映射在同一地址上,但这不是Windows对外保证的,而只是权宜之计,以后可能改变,且Windows NT的情况也可能不同。 MyTextOut()将截获的TextOutA()的参数lpText(即输出字符串)改变以后才输出,从而可以看到截获是否成功。之所以改变两个字符而不是简单的一个,是因为只改变一个字符将导致汉字输出乱码。 MyTextOut()源码中唯一的一条汇编语句__asm sub esp,14h是所有源码中最难写的语句。如果没有这条指令,MyTextOut()将无法正确返回到进程调用TextOutA()处的下一条指令上,出现的“意外”情况是:进程调用TextOutA()的最后一个参数、即输出字符串长度参数将作为返回地址从堆栈中弹出,从而使EIP为一个很小的值,程序进入Windows系统用作指针检查的低端内存,导致非法内存访问。在调试过程中发现导致这种现象的原因是MyTextOut()在临返回前使用了add esp,14h来清除并不需要清除的堆栈,从而破坏了堆栈。显然,原因在于函数调用说明使编译器产生了“错误”的堆栈管理代码,我不知道如何改正这一点,只好使用__asm sub esp,14h强行使堆栈指针指向“正确”的返回地址。有知晓个中奥妙的同志与作者联系,多多指教。 以下程序在Windows 98、Microsoft Visual Studio 97中调试通过,由于编程中并未使用Windows 9x的特性,且程序依靠的PE文件格式在Windows 9x和Wiundows NT中是通用的,因此上述方法在Windows NT可能也是可行的,只是我并未验证(我没有装Windows NT的机器)。另外,某些方面的情况由于编译器和操作系统不同可能会有所不同(如编译器生成的指令),我的叙述会因此而偏颇甚至错误,在此先做个提醒,也欢迎来意见改进编程。
我也想舔着个13脸来参加一下开源大赛啊,怎么没开源标签了 UI采用: EXUI20210101 调用模块: 精易模块 9.0.0(论坛源码)、 zyJson3.1.5(网上有源码)、 VJaudio( BASS模块,论坛下载的)、彗星歌词显示模块(附件带源码) 界面设计: AdobeIllustrator 2020设计 采用了 EXUI组件皮肤定制,没有用 EXUI自绘,还不就是能力不足呗。 软件功能: 1、  bass频谱绘制 2、  支持格式:*.mp3,*.wma,*.ape,*.ogg,*.flac,*.wav,*.mp4,*.m4a,*.mid,*.mpc,*.wave,*.cd,*.rm,*.tta,*.aiff,*.au 3、  取酷狗封面、歌词、解析lrc歌词 4、  遍历本地音乐文件 5、  两款界面皮肤更改 6、  还有蹩脚线程不卡界面 7、支持拖放音乐文件和 lrc歌词 然后就各种缝合,缝合怪就完成了,唯一有点成就感的就是自己写了一个 lrc 歌词解析 ,见: https://bbs.125.la/forum.php?mod=viewthreadtid=14658136page=1ordertype=1#pid20393566 AI界面设计效果图 成品软件界面 最后更新历史 已知问题 1.配置 2.专辑保存问题 3.第一次启动时加载皮肤,组件皮肤会加载失败的问题 4.更换皮肤会出现覆盖当前专辑图片的情况,因为重新载入了歌词专辑图片 5.如果文件夹内没有任何音乐文件会出错 ———————更新 1.8.5.0 2021.01.12 1、添加列表搜索功能,支持首字母拼音 2、添加我的收藏 3、修复部分皮肤加载失败,出现透明效果的 BUG 4、添加歌曲列表菜单 ———————更新 1.7.2.0重大更新 2021.01.01 1、重写歌词解析函数,减少不规则歌词错误 2、加入白色皮肤 3、重写网络获取歌词 API函数,服务器指向更改 4、修改皮肤显示错误等问题 5、修改菜单皮肤。 6、重写歌词界面,支持载入更多歌词。 ———————更新 1.6..5.0 2020.12.23 1、更新毛玻璃频谱效果 2、更新音乐文件和歌词文件,拖放文件支持 3、修改成静态变量,减少内存占用 4、修复播放新音乐时重置音量的问题 5、修复播放新音乐时重置音效的问题 6、修复播放音乐需要等待加载歌词的问题 写得非常臃肿不够简洁,我的第一个软件,希望大家多多指教

1,486

社区成员

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

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