Top > OOobbs3 > 94
** [[OOobbs3/94]] [#a5b2bba2]
-''サマリ'': DLL呼び出し
-''環境'': Basic
-''状態'': 解決
-''投稿者'': [[セルダン]]
-''投稿日'': 2012-06-05 (火) 16:10:22
*** 質問 [#b17e6261]
以下のプログラムで、自作のCのDLLを呼び出していますが、
「アクションは支援されません。無効なプロシージャーの呼び出し」
というエラーが発生してしまいます。

対処方法をご教示お願いいたします。

#code(ob){{
REM  *****  BASIC  *****

Declare Function JoConvTruePath Lib "officeoxt20.dll" Alias "ConvTruePath" ( ByRef strTruePath As String, ByVal nOutSize As Long, ByRef strPath As String ) As Integer		

Sub Main
	'システムパスを取得
	Dim iSize			As Long
	Dim iRet			As Long
	Dim strBufPath	As String * 256
	Dim strRealPath	As String * 256
	iSize			= 256
	strBufPath	= "C:\Program Files\Java"
	iRet = JoConvTruePath( strRealPath , iSize,  strBufPath)	
End Sub
}}
*** 回答 [#uce2cb11]
- 今日も感謝でついてる♪ 自己解決しました。

#code(ob){{
REM  *****  BASIC  *****
 
Declare Function JoConvTruePath Lib "officeoxt20.dll" Alias "ConvTruePath" ( ByRef strTruePath As String, ByVal nOutSize As Long, ByRef strPath As String ) As Integer        
 
Sub Main
    'システムパスを取得
    Dim iSize            As Long
    Dim iRet            As Long
    Dim strBufPath    As String * 256
    Dim strRealPath    As String * 256
    iSize            = 256
    strBufPath    = "C:\Program Files\Java"
    strRealPath = String(iSize," ")  ← この行を追加したらエラーはなくなりました。
    iRet = JoConvTruePath( strRealPath , iSize,  strBufPath)    
End Sub
}}

でもなぜ?と言う感じです。 -- セルダン &new{2012-06-06 (水) 15:57:46};
- バッファーを用意しておかないとエラーになるタイプのようですねぇ。 -- はにゃ? &new{2012-06-07 (Thu) 22:11:15};
- Dim strRealPath    As String * 256でバッファーは確保されないのですか? -- セルダン &new{2012-06-08 (金) 11:18:36};
- それらしき部分のコードをチラッと見ると・・・、パーサがパースして SbiCodeGen::Gen に渡されているところまで見ましたが・・・。後はご自分でどうぞ。Basic の実装にはもう興味がありませんので、API は Python から使いますが。OOo Basic は PyPy などで実装しなおせばいいんじゃないかと最近は思っています。 -- はにゃ? &new{2012-06-08 (金) 21:41:41};

#comment
*** 感想,コメント,メモ [#jca52d33]

#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes