当前位置: 代码迷 >> PB >> PB10调用DLL的有关问题,请各位大侠指教
  详细解决方案

PB10调用DLL的有关问题,请各位大侠指教

热度:167   发布时间:2016-04-29 09:29:53.0
PB10调用DLL的问题,请各位大侠指教
调用微软的TTS,在PB中写一个汉字发音的程序,测试通过。
现在想把发音的程式写成com/com+,只需要把需要发音的汉字传入即可,但出现以下错误,请各位大侠指教:
Error:Error calling external object function uof_read at line 7 clicked event of object cb_3 of w3_test

过程如下


A.建立一组件工程,内有 custom class 内建一function 其说明如下
--------------------
function:
function name:uof_read
access :public
return type :integer
argument type:string
argument name:auo_text
---------------------
global var:oleobject tts//声明全局变量
long ll_status
tts = CREATE oleobject
ll_status = tts.ConnectToNewObject("SAPI.SpVoice")

IF ll_status <> 0 THEN
  messagebox('调用错误','您可能还未安装语音库!')
  tts.DisconnectObject()
  DESTROY tts
 else
 end if

 //朗读
 integer li_ret
 //终止先前朗读,如果有
 li_ret = tts.speak(" ","2")
 
// 异步朗读
  li_ret = tts.speak(auo_text,"1")
 return 1
---------------------------
组件信息如下
********** COM/COM+ Project Options **********
Component Server File Name: c:\documents and settings\administrator\my documents\genapp1.dll
Interface Definition File Name: c:\documents and settings\administrator\my documents\genapp1.idl
Comment :
Object COM ClassName Program ID Version Interface Type Interface Name

n_genapp1 COClass_n_genapp1 PB105.n_genapp1 1.0 dual In_genapp1
-----------------------------------------------------
B. 新建 Applicatoin -> window->button 
//声明实例变量 
oleobject n_voice
-------------
按扭click 事件
long ll_status
n_voice = CREATE oleobject
ll_status = n_voice.ConnectToNewObject("PB105.n_genapp1")
n_voice.uof_read("语音测试") 
----------------------
C.执行application 后出现错误信息:Error:Error calling external object function uof_read at line 7 clicked event of object cb_3 of w3_test




------解决方案--------------------
帮顶一把
------解决方案--------------------
函数声明
有问题
------解决方案--------------------
ole端口占用没有?
------解决方案--------------------
来帮顶贴!
------解决方案--------------------

而在pb10以后 则需要这样申明外部函数:
FUNCTION ulong FindFirstFile(string lpFileName,ref str_WIN32_FIND_DATA lpFindFileData) LIBRARY "kernel32.dll" ALIAS FOR "FindFirstFileW" //
FUNCTION ulong FindNextFile(ulong hFindFile,ref str_WIN32_FIND_DATA lpFindFileData) LIBRARY "kernel32.dll" ALIAS FOR "FindNextFileW" //
//播放wav文件
FUNCTION ulong waveOutGetNumDevs() LIBRARY "Winmm.dll"
FUNCTION ulong sndPlaySound(ref string lpszSoundName,ulong uFlags) LIBRARY "Winmm.dll" ALIAS FOR "sndPlaySoundA;Ansi"

即 FOR "****W" 或 FOR "*****A;Ansi"
而有的函数声明则完全不需要 ALIAS FOR "*******"
  相关解决方案