
No.1ベストアンサー
- 回答日時:
>DLL化する関数の中でグローバル変数を使っているのですが、
>DLLの関数の中でもグローバル変数を使えますか?
DLL内ではグローバル変数は使えません。
DLLは、リエントラント(スレッドセーフ)にすべきです。
>やっぱり、引数として渡すしかないでしょうか?
そうなるでしょうけど、不正な引数を渡された時にエラーで弾く仕組みが必要だと思います。
例えば、構造体のポインタを渡す方式にして、構造体の先頭のメンバーに「構造体のサイズ」を予めセットしておかないと呼び出し時にエラーにする、など。
こうすると、バージョンアップで「構造体メンバーが増えた時」に、先頭のメンバーに入っている「構造体のサイズ」をDLL側で検査する事で「旧方式で呼び出した」か「新方式で呼び出した」かを判定して処理を振り分けできます。
この回答への補足
回答ありがとうございます。
DLLについて調べていて、わかったんですが、PChar型またはShortString型以外のデータをやり取りできるのはDLLとDLLを使うプログラムの両方をDelphiで作った場合だけなんですか?
これ以外のデータをやり取りする場合(文字配列、TStringListのデータ等)は、構造体のポインタを渡し、構造体のポインタを受け取るようにするしかないのですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
【Access】Excelインポート時に...
-
マクロで"#N/A"のエラー行を削...
-
お助けください!VBAのファイル...
-
mailstorehomeのエクスポートで...
-
文字列内で括弧を使うには
-
ACCESS VBAのSplit()関数の使用...
-
ASPでこんなエラーが出たんです...
-
実行時エラー'-2147467259(8000...
-
VBスクリプトでIEの404 not fou...
-
エクセル関数式=ABSで#VALUE!...
-
VBAで時間(00:00形式)を積算...
-
ACCESSで値を代入できないとは?
-
VB.net 重複チェックがしたいです
-
On ErrorでエラーNoが0
-
VB2010でデータグリッドビュー...
-
数式は残し値をクリアするマク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
On ErrorでエラーNoが0
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
マクロで"#N/A"のエラー行を削...
-
VBAのリストボックスで、横スク...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
「実行時エラー '3167' レコー...
-
実行時エラー 438 の解決策をお...
-
【VBAエラー】Nextに対するFor...
-
ACCESSで値を代入できないとは?
-
Filter関数を用いた結果、何も...
-
文字列内で括弧を使うには
-
【VB.NET】 パワポ操作を非表示で
-
レコード登録時に「演算子があ...
おすすめ情報