構造体のパラメータをDLLに渡す方法
いつも参考にさせて頂いております。
構造体のパラメータをDLLに渡す方法で注意するところはありますか?
外部パッケージで購入したDLLを外部コールしたいのですがうまくいきません。
購入したパッケージは「ローラン株式会社様のSakuraBar for Windows Ver7.0」という
バーコード作成ソフトです。
SBarExportBMPという関数を使用してビットマップファイル出力を行うのですが、
エラー(-100:バーコード指定エラー)が表示され出力できません。
メーカーからは「構造体が正しく渡っていない可能性が高い」と返答がありました。
構造体を使用しないDLL使用は問題ありません。
構造体使用時の注意点及び過去に実績等ある方がいらっしゃいましたら、助言をお願い致します。
BufSetNum('DF'VAR,1,バーコード種類,4,4)
BufSetNum('DF'VAR,5,チェックデジット,4,4)
・・・・・
BufSetNum('DF'VAR,149,0,4,4)
外部コール U=UDP '@SBar2012.SBarExportBMP' 5 パラメータ (STDCALL)
パラメータ
1 'ATA4'
2 '4514603390810'
3 DF(構造体)
4 'D:\'
5 戻り値
Windows10 Pro、Magic xpa 3.2
-
ISHIJIMAさん ありがとうございます。
一応、逆引き辞書も確認してみたのですが...
もう一度確認してみます。
-
よく間違えるのは、BufSetNum関数の第4,5引数(記憶形式,長さ)だと思います。
1つでも間違っているとうまくいかなかいと記憶しています。
構造体のメンバの型とMagicの記憶形式を見比べると、どこか一致していないかもしれません。
(最後のBufSetNum関数の第2引数が149とすると、構造体のメンバが多いですね…)
-
kitabayashiさん ありがとうございます。
1つでも間違うとうまくいかないのですね。
構造体のメンバは30あり、型の種類は、Long、Double、String *32の3種類です。
30中28はLongです。
もう一度確認してみます。
Long > BufSetNum('DF'VAR,1,バーコード種類,4,4)
Double > BufSetNum('DF'VAR,61,0,8,8)
String *32 > BufSetAlpha('DF'VAR,105,Fill(' ',32),3,32,'TRUE'LOG)
-
第4引数(記憶形式)の値が間違っていました。
変更し実行したところエラー内容が変わってきましたので
構造体の引き渡しはうまくいっているように思います。
初歩的なことで、大変お騒がせ致しました。
ご指摘いただき、再確認することで先に進めました。ありがとうございました。
サインインしてコメントを残してください。
コメント
4件のコメント