PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
724 | 98/03/03 10:21:49 | RE(4):PB5.0.03: 外部関数の呼び出しがうまくいきません。 By kin |
723 | 98/03/02 13:57:09 | RE(3):PB5.0.03: 外部関数の呼び出しがうまくいきません。 By kin |
720 | 98/03/02 10:20:37 | RE(2):PB5.0.03: 外部関数の呼び出しがうまくいきません。 By M.M |
717 | 98/02/27 18:44:20 | RE(1):PB5.0.03: 外部関数の呼び出しがうまくいきません。 By あすかちゃんの父 |
716 | 98/02/27 17:16:02 | PB5.0.03: 外部関数の呼び出しがうまくいきません。 By kin |
カテゴリ:旧電子会議室
日付:1998年03月03日 10:21 発信者:kin
題名:RE(4):PB5.0.03: 外部関数の呼び出しがうまくいきません。
大変お騒がせいたしましたが、一応動くようになりました。
半ばやけくそで偶然うまくいったので、正しいやり方かどうかはわかりません。
原因はC言語側にあったようです。
まず、far Pascal の代わりに WINAPI で宣言しました。
プロトタイプ宣言は以下のようになります。
__declspec(dllexport) LONG WINAPI FDirLst( LPCSTR, LPCSTR );
dllexport が far Pascal の代わりになっていると思っていたので pascal 宣言は不要
と思っていたのですが、WINAPI が必要なようです。
ところが、これだけでは関数が認識できなくなります。
たぶんWINAPIで宣言すると呼び出し規約が自動的に _stdcall になってしまうのでは
ないかと思いますが、DLLの中を見てみたら関数名が
_FDirLst@8
に変わっていました。
_stdcall では頭にアンダーバー、後ろに @ と引数のバイト数合計がつきます。
引数は32ビットポインタですから、4Byte * 引数の数になるようです。
従って、PB側の外部関数宣言を変更しました。
Private Function long FDirLst( string s1, string s2 ) &
library \"FDirLst.dll\" &
alias for \"_FDirLst@8\"
これで一応きちんと動作していますが、関数名が変わってしまうのが今ひとつ釈然と
しません。
私はC言語が全くの素人で、実はこのDLLも別の部署に頼んで作成してもらっています。
他のやり方があると思うのですが、ご存じの方がいらしたら是非教えてください。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows95
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.