>グローバル変数はDLLの中で使えますか?入力中の回答があります。ページを離れますか?※ページを離れると、回答が消えてしまいますページを離れるA回答を続ける入力中のお礼があります。通報するこの質問への回答は締め切られました。16:05>DLL化する関数の中でグローバル変数を使っているのですが、>DLLの関数の中でもグローバル変数を使えますか?DLL内ではグローバル変数は使えません。DLLは、リエントラント(スレッドセーフ)にすべきです。>やっぱり、引数として渡すしかないでしょうか?そうなるでしょうけど、不正な引数を渡された時にエラーで弾く仕組みが必要だと思います。構造体のポインタを渡す方式にして、構造体の先頭のメンバーに「構造体のサイズ」を予めセットしておかないと呼び出し時にエラーにする、など。すると、バージョンアップで「構造体メンバーが増えた時」に、先頭のメンバーに入っている「構造体のサイズ」をDLL側で検査する事で「旧方式で呼び出した」か「新方式で呼び出した」かを判定して処理を振り分けできます。回答ありがとうございます。delphiで、タイマー関数の中で、変数の初期値を入れ、カウントする場合。グローバル変数を使いたいのですが。Delphiにて、呼び元の情報を(グローバル変数を使わずに)渡したい。回答数ランキングです。職業恋愛アドバイザー・婚活アドバイザーこの専門家の回答をチェック5専門家プロファイル_柏木りさこ職業恋愛アドバイザー・婚活アドバイザーこの専門家の回答をチェック他の専門家の回答をチェックこのQ&Aを見た人が検索しているワードグローバル変数DLLこのQ&Aと関連する良く見られている質問QDLL内からの外部変数の参照BCC(フリーコンパイラ)で、WindowsAPIを使ったプログラムを作成しています。し、test.dllを作成しました。test.libを作成ました。参照先が見つからないというエラーが起こり、DLLが作成できなくなってしまいました。DLL内から外部の変数を参照するにはどうしたらよいでしょうか。この場合の外部の変数というのは、WinMain関数のあるmain.cファイル内の静的変数です。宣言をすると、参照できないというエラーが出て逆ですね。DLL側(test.c)は実体定義をします。MessageBox表示親ハンドルWinMain(main.c)でextern宣言します。(実体はtest.dll)test.c内では、このハンドルを使用してMessageBox()関数をコールします。main.cでは、このハンドルに自身のウィンドウハンドルを退避しておきます。ここに処理を書く}という関数が必要なようです。他の回答も見るQDWORDの実際の型は何でしょうかVC++.NETの環境です。数値を比較しようとしました。int型のようにも見えます。int型であると記述されています。int型ならこのワーニングはでないはずなのですが、なぜでるのでしょうか。DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。DWORD;"と宣言されています。Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。他の回答も見るQファイルやディレクトリの存在確認を行う方法ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。何か組み合わせて作るものなのでしょうか?perlとか便利な演算子があるのですが、C/C++って器用ではないですね。Windows2000です。使えとか書いてあるけど。他の回答も見るQDLLでメンバ関数をエクスポートする方法VC++2005でDLLを作成しています。そこで、クラスのメンバ関数をエクスポートする必要が出てきました。使用せず、DEFファイルを使用してエクスポートするには、どのようにしたらよろしいでしょうか。Aベストアンサーこんにちは。DLLプロジェクトにMAPファイルの作成を設定してから、ビルドします。MAPファイル名を指定しない場合、MAPファイル名には、DLLプロジェクト名が使用されます。作成されたMAPファイルをメモ帳で開いて、メンバ関数につけられた装飾名を確認してDEFファイルに記載します。「MAPファイル作成の設定」http://msdn.microsoft.com/ja-jp/library/k7xkk3e2(v=vs.80).aspx「DEFファイルを使用したクラスのエクスポート」http://hata.cc/docs/DLL/4.html当方のVisualStudio2008で、以下のクラスをエクスポートして、成功しています。DLLプロジェクトにMAPファイルの作成を設定してから、ビルドします。MAPファイル名を指定しない場合、MAPファイル名には、DLLプロジェクト名が使用されます。作成されたMAPファイルをメモ帳で開いて、メンバ関数につけられた装飾名を確認してDEFファイルに記載します。「MAPファイル作成の設定」http://msdn.microsoft.com/ja-jp/library/k7xkk3e2(v=vs.80).aspx「DEFファイルを使用したクラスのエクスポート」http://hata.cc/docs/DLL/4.html当方のVisualStudio2008で...続きを読む他の回答も見るQEXE1→DLL→EXE2数値を受け渡す方法C++プログラムの初級者です。EXE1の数値をDLLの関数Func1に渡し、そこで計算した結果を関数Func2でEXE2に送るプログラムを作成しています。下記のようなDLLのコードを作成したのですが、うまく数値を受け渡すことが出来ません。調べてみると、EXE1⇔DLLとEXE2⇔DLLとは、アドレス空間が別なので、DLLのStatic変数を共有できないようです。1対1では数値受け渡しは、正常に動作しています。具体的に、DLLにどのようなコードを書けば、数値を受け渡すことができるのでしょうか?ご指導よろしくお願いします。DLL_PROCESS_DETACH:break;}//----return(TRUE);}C++プログラムの初級者です。EXE1の数値をDLLの関数Func1に渡し、そこで計算した結果を関数Func2でEXE2に送るプログラムを作成しています。下記のようなDLLのコードを作成したのですが、うまく数値を受け渡すことが出来ません。調べてみると、EXE1⇔DLLとEXE2⇔DLLとは、アドレス空間が別なので、DLLのStatic変数を共有できないようです。1対1では数値受け渡しは、正常に動作しています。使用すればできそうな気がします。(確認はしてませんが。共有する方法http://msdn.microsoft.com/ja-jp/library/h90dkhs0(v=vs.90).aspx他の回答も見るQGetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・お世話になっています。iniファイルを読込み、各変数に代入するC言語のDLLを作成したいのです。現在まで、理解した点がwindows.hのインクルードを記述するところ辺りです。iniファイルは下記のようなレイアウトです。---<mst.ini>----------------------------[user]name=usernameID=userid[pc]pcname=FMV----------------------------------------#include<windows.h>は記述することまでは分かりましたが、以下から進みません。GetPrivateProfileString("")初心者で申し訳ありませんが、お助け願います。Aベストアンサーこんにちは。itohhといいます。サンプルを載せておきます。mst.iniファイル内の[user]セクションのnameキーの値を取得する。解説:iniファイル名をフルパスで指定しないとWindowsのディレクトリにあるものと判断されます。Win9xなら「c:\windows」、WinNT系なら「c:\WinNT」。[user]セクションのnameキーがないときは、デフォルト値で指定した値が設定させます。復帰値「dwLen」は実際に設定した値(文字列)の長さが返されます。itohhといいます。サンプルを載せておきます。mst.iniファイル内の[user]セクションのnameキーの値を取得する。C++でプログラムを行っていたのですが、プログラムを実行すると、エラーが発生します。いうメッセージが出てきました。Violationについて調べたのですが、いまひとつ理解できません。これはどういうことなのでしょうか?また、解決策をご教授願えないでしょうか?初心者なので、可能な限り専門用語などを使わない、わかりやすい解説をしていただけると幸いです。Aベストアンサーアクセス違反。システム自身の保護機能発動。アクセスできないメモリにアクセスしてる。書式指定箇所を埋めるのにパラメータが足りないなどが良く引っかかる点。