reset_cat の回答履歴

全235件中81~100件表示
  • dllの呼び出しで引数が渡らないらしい

    dllの呼び出しで引数が渡らないらしい 50間近になって.NETにチャレンジ。日々?!?の毎日です。 ネットに転がっていた「静的にdllを引用する」コードは動きました。が、「動的にdllを引用」するコードをネットからかき集めてくみ上げましたが引数が旨く渡らないのか、思うように動きません。当該dllはgogo.dllで有名だと思います。 正直、ManagedとUnmanagedのメモリ管理とか、呼び出しの引数の渡し方も理解していません。見よう見まね状態ですが、どうしても当該dllを使いたいので掲載してしまいました。(^_^; 下記の問題が2つ 1)引数に「ref」を付けないと「保護されたメモリ…」のエラーが発生してしまう。  たぶん、このような現象が出ること自体に呼び出し方の問題がある? 2)最終的にファイル名fnがdll側に旨く渡っていないように思える。  Marshal…を使うのかも知れませんが、よくわかりません。 素人質問で恐縮ですが、下記のような動的なdllの引用で、静的な引用と同じように動くコードの書き方を教えて下さい。言語はc#です。 下記がコードですが、文字数削るためかなり行を削っています。初期化とかはちゃんとコーディングしています。 [静的にdll引用=>正常終了] [DllImport("gogo.dll", EntryPoint = "MPGE_setConfigure")] static extern int MPGE_setConfigureStrings(int mode, int dwPara1, string dwPara2); (中略) string fn = "D:\\test.wav"; i = MPGE_setConfigureStrings(1, 0, fn); =>この後、test.wavに対しての処理で正常終了が返る(^_^) [動的にdllを引用=>ダメ] [DllImport("kernel32")] static extern int LoadLibrary(string lpLibFileName); [DllImport("kernel32")] static extern IntPtr GetProcAddress(int hModule, string lpProcName); [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)] delegate int d_MPGE_setConfigure(ulong mode, ref ulong dwPara1, string dwPara2); [MarshalAs(UnmanagedType.FunctionPtr)] static d_MPGE_setConfigure e_MPGE_setConfigure; (中略) IntPtr p_MPGE_setConfigure = GetProcAddress(dllHandle, "MPGE_setConfigure"); e_MPGE_setConfigure = (d_MPGE_setConfigure)Marshal.GetDelegateForFunctionPointer(p_MPGE_setConfigure, typeof(d_MPGE_setConfigure)); string fn = "D:\\test.wav"; ulong p1 = 0; i = e_MPGE_setConfigure(1, ref p1, fn); =>この後、dllからtest.wavが読み込めない旨のメッセージが吐かれる(T.T) 以上です。

  • dllの呼び出しで引数が渡らないらしい

    dllの呼び出しで引数が渡らないらしい 50間近になって.NETにチャレンジ。日々?!?の毎日です。 ネットに転がっていた「静的にdllを引用する」コードは動きました。が、「動的にdllを引用」するコードをネットからかき集めてくみ上げましたが引数が旨く渡らないのか、思うように動きません。当該dllはgogo.dllで有名だと思います。 正直、ManagedとUnmanagedのメモリ管理とか、呼び出しの引数の渡し方も理解していません。見よう見まね状態ですが、どうしても当該dllを使いたいので掲載してしまいました。(^_^; 下記の問題が2つ 1)引数に「ref」を付けないと「保護されたメモリ…」のエラーが発生してしまう。  たぶん、このような現象が出ること自体に呼び出し方の問題がある? 2)最終的にファイル名fnがdll側に旨く渡っていないように思える。  Marshal…を使うのかも知れませんが、よくわかりません。 素人質問で恐縮ですが、下記のような動的なdllの引用で、静的な引用と同じように動くコードの書き方を教えて下さい。言語はc#です。 下記がコードですが、文字数削るためかなり行を削っています。初期化とかはちゃんとコーディングしています。 [静的にdll引用=>正常終了] [DllImport("gogo.dll", EntryPoint = "MPGE_setConfigure")] static extern int MPGE_setConfigureStrings(int mode, int dwPara1, string dwPara2); (中略) string fn = "D:\\test.wav"; i = MPGE_setConfigureStrings(1, 0, fn); =>この後、test.wavに対しての処理で正常終了が返る(^_^) [動的にdllを引用=>ダメ] [DllImport("kernel32")] static extern int LoadLibrary(string lpLibFileName); [DllImport("kernel32")] static extern IntPtr GetProcAddress(int hModule, string lpProcName); [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)] delegate int d_MPGE_setConfigure(ulong mode, ref ulong dwPara1, string dwPara2); [MarshalAs(UnmanagedType.FunctionPtr)] static d_MPGE_setConfigure e_MPGE_setConfigure; (中略) IntPtr p_MPGE_setConfigure = GetProcAddress(dllHandle, "MPGE_setConfigure"); e_MPGE_setConfigure = (d_MPGE_setConfigure)Marshal.GetDelegateForFunctionPointer(p_MPGE_setConfigure, typeof(d_MPGE_setConfigure)); string fn = "D:\\test.wav"; ulong p1 = 0; i = e_MPGE_setConfigure(1, ref p1, fn); =>この後、dllからtest.wavが読み込めない旨のメッセージが吐かれる(T.T) 以上です。

  • GetProcAddressとUnicode、Ansiについて

    先日似たような部分で疑問が生じましたが GetProcAddressについて、実践的な部分をもうちょっと詳しく知りたくなりました。 Unicode版、Ansi版での、ロードする関数名が 末尾にWかAがついてることが多いと思うのですが GetProcAddressには文字列を指定しなければならないため なるべく手間を避けるとしても #ifdef _UNICODE #define _FWA(x) #x"W" #define _tfuncwa(x) L#x L"W" #else #define _FWA(x) #x"A" #define _tfuncwa(x) #x"A" #endif こういう風にプリプロセッサに対してなんらかの配慮をして置いたうえで HMODULE hDLL( LoadLibrary(_T("Shlwapi.dll")) ); typedef HRESULT (__stdcall *Func)( LPCTSTR ); Func func = (Func)GetProcAddress(hDLL,_FWA(PathFileExists)); とかやるようにするか、若しくはDllから動的に引っ張ってくる関数の周りで使う文字列は UnicodeかAnsiかに決め打ちして、必要が生じるなら変換、といった配慮のいずれかは必ず必要になるのでしょうか?

  • 効率的な拡張子チェック関数を考えています

    現在以下のような関数を試作してみました。 fnがファイルパスで、exが比較する拡張子の、「.」を含まない部分です。 (CompareStringはこの設定で大文字小文字の差を許容して比較します) BOOL CompareExtension(LPCTSTR fn ,LPCTSTR ex){ int i = _tcslen(fn); while ( fn[--i] != '.' ) if ( !i ) return 0; if ( CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE, fn+i+1, -1, ex , -1 ) != CSTR_EQUAL ) return 0; return 1; } これをたとえばこのように呼び出すと if ( CompareExtension(_T("a\\b\\c\\d.txtefg"),_T("tXtEFg")) ) _tprintf(_T("EQUAL\n")); 1が返り、EQUALと出力されます。 このとき 1.今のところ例外を見つけていませんが このfn+i+1は、この用途で、アルファベットの拡張子しか扱わないとしたら必ず PathFindExtension(fn)+1 のかわりになりますでしょうか? 2.Unicodeでもこのままで出来てしまっているのですが、文字定数も_T('.')などとマクロで囲わないと保証はされないのでしょうか? 3.「拡張子を自分でコード内に指定する」「パスが正常に渡されることが保証されてて、その文字数が拡張子の文字数より必ず多い」ならwhile文をなくして、ピリオドが来るべき位置を数字で打ってしまっても問題ないですよね? 4.またその他どこかになんらかの危険性がある可能性はあるでしょうか?

  • MicrosoftVisualC++2008でスニペットを使う方法が解

    MicrosoftVisualC++2008でスニペットを使う方法が解りません。 ツール>スニペットマネージャーにもc++は見当たりませんでした。 使ったことが一度も無いのですがネットで検索すると右クリックメニューに スニペットと表示されると思っておりますが見当たりません。 お手数ですがご教授頂けると助かります。

  • どなたか、SQLについて教えてください。 条件 以下の中で最大値

    どなたか、SQLについて教えてください。 条件 以下の中で最大値 どなたか、AccessのSQLについて教えてください。 Accessではなく一般的なSQLでもかまいません。 お願いいたします。 急に仕事でAccessSQLを使用して処理を行わなくてはならなくなりました。 まったくの素人のため、下記の条件で苦戦しております。 どなたか、よろしくお願いいたします。 下記のデータから、 ID 名前 個数 ----+------- AAA あああ 100 BBB いいい 200 CCC ううう 300 DDD えええ 400 EEE おおお 500 ----+--------- 個数350以下で、更に最大の値の値を求めたいです。 希望結果 --------------- BBB いいい 300 ----------------- 個数350以下までは、わかるのですが、更に最大を求める部分がわかりません。 以上、よろしくお願いいたします。

  • Visual C++ Express Edition でもprintf

    Visual C++ Express Edition でもprintfを使いたい 私は、Visual C++ 2008 Express Editionを使っています。  以前はVisual Studio 2005 Professionalを使っていました。 今まではプログラムを走らせている間の変数の変化を見るために、 printf関数を使って「出力」ウィンドウに数値を表示させていました。 Visual C++ 2008 Express Editionに変更してから、 同一のソースコードをコンパイル、実行しても printf文で記述した出力内容を「出力」ウィンドウに表示させることができません。 これは、Express Edition特有のものでしょうか? printfを使って変数を表示できる方法があれば教えてください。 よろしくお願いします。

  • pictureBox1.ImageLocation = ("1.jpg

    pictureBox1.ImageLocation = ("1.jpg"); pictureBox2.ImageLocation = ("2.jpg"); pictureBox3.ImageLocation = ("3.jpg"); pictureBox4.ImageLocation = ("4.jpg") pictureBox5.ImageLocation = ("5.jpg") ............ と永遠に数を増やしていく場合 わざわざ一文ずつ書く以外に方法はありますか? for (int i = 0; i == 10; i++){ "picturebox" + i + ".ImageLocation" = (i + ".jpg"); } のような感じにできると嬉しいのですが・・・ 返信お願いします

    • ベストアンサー
    • noname#250142
    • C・C++・C#
    • 回答数1
  • デバッグ開始でbin\Releaseにファイルが作成されてしまう。

    デバッグ開始でbin\Releaseにファイルが作成されてしまう。 Visual Studio 2008でC#によるWindowsアプリケーションを作成しているのですが、デバッグ開始を実行するとbin\Releaseにexeファイルなどが作成されてしまいます。 ビルドするとbin\Releaseにexeファイルなどが作成されます。 デバッグ開始の実行でbin\Debugにexeファイルなどが作成され、ビルドするとbin\Releaseに作成されるようにしたいのですが、どうすれば良いですか? ちなみに***.vshost.exeはbin\Releaseに作成されます。 これもbin\Debugに作成されるようにしたいです。

  • SQL WHERE文のノットイコールについて

    初歩的な質問ですみません。 Oracle9iでsqlplusで接続しています。 「member_accountテーブルのdelete_flag(VARCHAR2)カラムの値が'1'ではない」ものを抽出したいと考えてます。 ただ、正しい結果が返ってきません。 何が問題でしょうか?よろしくお願いいたします。 ============================================================ SQL> select count(ID) from member_account; COUNT(ID) ---------- 16450 SQL> SQL> select count(ID) from member_account where delete_flag='1'; COUNT(ID) ---------- 107 SQL> SQL> select count(ID) from member_account where delete_flag<>'1'; COUNT(ID) ---------- 0 SQL> SQL> select count(ID) from member_account where delete_flag!='1'; COUNT(ID) ---------- 0 ============================================================ よろしくお願いいたします。

    • ベストアンサー
    • MixNuts
    • Oracle
    • 回答数3
  • ファイルコピーで0x00000005エラー

    c++で作ったツールにてファイルコピーを行おうとしています。 explorerからexeを直接実行すると成功しますが、phpからexeを起動するとコピーに失敗する問題が出ています。 GetLastErrorにてエラー理由を調べてみると、下記エラーでした。 0x00000005:アクセスが拒否されました。 権限絡みの問題かと考えているのですが知識不足で、コピー元ファイルへのアクセス権の問題なのか、コピー先フォルダへのアクセス権の問題なのか、どちらもあり得るのか、等々分かりません。 何かご存じの方は教えていただけないでしょうか。 宜しくお願い致します。

  • VB6.0のモジュール内が文字化けを直す方法を教えていただけないでしょ

    VB6.0のモジュール内が文字化けを直す方法を教えていただけないでしょうか。 Visual Studio2008で作成したものを、 VB6.0で見ようとしています。 以下のようにコードが文字化けしているのですが、 どうしたら文字化けを直すことが出来るのでしょうか? ご存知の方がおられましたら教えてください。 どうぞよろしくお願いいたします。 Public 蜈・蜉帙ヵ繧。繧、繝ォ As String, 險ュ螳壹ヵ繧。繧、繝ォ As String, 邨先棡繝輔ぃ繧、繝ォ As String Public 迴セ蝨ィ繝代せ As String, 繝・・繧ソ繝代せ As String Public DataFile As System.IO.StreamReader

  • CR-Z(MT)って買い?

    HONDA好きのMT好きです。今乗ってるのはHR-VのJ4(5MT)で,街中では特に不満はないけど,高速ではちょっとしんどいです。 HONDAのMTでは選択肢が狭いですが,この春くらいにシビックタイプR(FD2)を買うつもりで貯金してきました。CR-ZはどうせCVTだろうと思っていたら6MTが設定されていてちょっとびっくりです。 FD2より維持費も安そうだし,便利機能もいろいろあって食指が動いています。気になるのは走行性能ですが,サーキットではFD2より速いみたいな記事を見たのですが,ホントでしょうか? FD2を買っても見せびらかすような気持ちは毛頭なく,サーキットに行くつもりもなく,スポイラーを外してエンブレムも普通のシビックのに替えようと思っていたくらいです。純粋に自己満足で走りたいだけです。走りで満足できるならCR-Zもありかなぁと思っています。 近くのディーラーはCVTの試乗車しかなかったので,MTに乗られた方,どんな感じだったか教えて下さい。

  • ツールバーに表示されるユーザーコントロールのアイコンを変更するには

    Microsoft Visual Basic 2008 Express Editionでユーザーコントロールを作っていますが、ツールバーに表示されるアイコンが標準(歯車?)のままです。 ユーザーコントロールクラスには以下の宣言がされてます。 <System.Drawing.ToolboxBitmap(GetType(Test), "Test.bmp")> _ Public Class Test   : End Class リソースには、このBitmapは追加してあります。 どなたか対応方法を教えてください。

  • .NETのフォームアプリケーションであれを設置したい!

    .NETのフォームアプリケーションであれを設置したい! 名前がわからないんです。 エクスプローラーありますよね。 あれを起動して、表示を「詳細」に変えた時のあれです。  名前 |サイズ| 種類 |更新日時 1.jpg   192KB  JPEG画像 2010/3/2 こんなかんじのやつです。 なおかつここに画像を入れることができたら最高なのですが。 知ってる方、↑これの名前を教えてくれませんか? .NETコンポーネントでもCOMコンポーネントでもどちらでも構いません。

  • インターネットを光で引くことにしました。

    インターネットを光で引くことにしました。 久しぶりにpspのモンスターハンター2Gをしたいと思っています。質問なんですが…オンラインに繋げたら離れた場所にいる人(北海道の人が沖縄県の人)と 一緒にプレイ出来たりしますか?初心者なんで出来るだけ詳しく教えて頂ければ嬉しいです。 インターネットのOSはXPで無線LANで繋げてます。

  • ORACLEをDBで C#.netでプログラムを書きたいですが、

    ORACLEをDBで C#.netでプログラムを書きたいですが、 前は、 イベント発生する際に     cnn.ConnectionString = "user id=xxx;password=xx;data source=xx" cnn.Open() cmd.Connection = cnn DB接続してデータをUPしたりしましたが、 今回は、 DBを5回線ずっと繋がって(さーばー側)、イベント発生(クライアント側)するときに空いた回線を使ってDBを接続したいです。 如何作れば、いいですか? 宜しく御願いします。

  • VB2005からOracle10gへの接続

    いつもご参考にさせて頂いております。 今年からVB2005(VIsual Basic)を勉強しています。 データベース接続なんですが、Accessでの接続は上手くいきましたが、 Oracle10gがどうしても接続できません。 根本的に間違えているのかもしれないですが...。 どなたかOracle10gへの接続方法を教えて頂けませんでしょうか? また接続には色々種類があるみたいですが、どれがどの様なときに適切なのかも教えて頂ければ、とても助かります。 ご教授宜しくお願い致します。

  • 並列動作しない?ActiveX EXE

    たびたび申しわけありません。 質問番号:5696830で質問した者です。 自分なりに調べ、アウトプロセスで動くと思われるActiveX EXEを使用した プログラムを行ってみましたが… 並列動作しません…プログラム的には、 ActiveX EXE → Project1 Class1の中の 関数の中に、   For i=0 to 10   Sleep(1000)   Next クライアントVBA → 上記参照設定後 Dim obj As MyComponent.MyClass Set obj = New MyClass 関数実行! としました。問題なく動作はします。 しかし、並列処理ではなく、関数実行終了(Forループ終了)まで 戻ってきません。これでは、ActiveX EXEを使用した目的が…? このような具合です。 私のプログラム構造上、おかしな箇所はありませんでしょうか? よろしくお願いいたします。

  • 並列動作しない?ActiveX EXE

    たびたび申しわけありません。 質問番号:5696830で質問した者です。 自分なりに調べ、アウトプロセスで動くと思われるActiveX EXEを使用した プログラムを行ってみましたが… 並列動作しません…プログラム的には、 ActiveX EXE → Project1 Class1の中の 関数の中に、   For i=0 to 10   Sleep(1000)   Next クライアントVBA → 上記参照設定後 Dim obj As MyComponent.MyClass Set obj = New MyClass 関数実行! としました。問題なく動作はします。 しかし、並列処理ではなく、関数実行終了(Forループ終了)まで 戻ってきません。これでは、ActiveX EXEを使用した目的が…? このような具合です。 私のプログラム構造上、おかしな箇所はありませんでしょうか? よろしくお願いいたします。