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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.