問題タブ [getprocaddress]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1953 参照

c - GetProcAddress はすべての関数に対して 0 を返します

まず第一に、私はこれをしばらく検索しましたが、私のケースに関連する回答が見つかりません。基本的に、私は Windows DLL (dnsapi.dll) の関数のアドレスを取得しようとしていますが、GetProcAddress は 0 を返しています。 dll. 同じ結果です。これは私が作成した 2 番目のプログラムのコードで、まだ動作しません。

ところで、GetLastError は 127 を返します。これは、GetProcAddress が機能しないときに返される最も一般的なエラーのようですが、何が問題なのかわかりません。これらのカップルだけでなく、多くの関数と DLL で試しました。

ありがとう。:)

編集:リンクされた記事は私の問題を解決しました。私が試した機能にはすべてユニコードとアニスのバージョン(wとa)がありました。完全な API 名を使用すると、問題が解決しました。その質問をリンクしてくれてありがとう。

ありがとうございました。

0 投票する
0 に答える
1905 参照

c++-cli - C++/CLI DLL の LoadLibrary と GetProcAddress - 2 回読み込まれる

次のことを行う C ファイルを含む .vcxproj があります。

Process Explorer を使用して LoadLibrary を呼び出すと、「tube.dll」が読み込まれます。上記の行を呼び出すと、rtn = (pfn)(pData)「tube.dll」が再度読み込まれます!!

この dll (tube.dll) は、/clr でコンパイルされた混合アセンブリ (C++/CLI) です。"tube.dll" の 2 番目のインスタンスが clr コンテキストに読み込まれる可能性はありますか? もしそうなら、それを防ぐ方法は?を使用するには DLL を 1 回ロードする必要がありますがGetProcAddress、関数を呼び出すときに再度ロードする必要はありません。

0 投票する
1 に答える
813 参照

c++ - GetProcAddress() C++ VBexpress 13 を使用して関数が見つからない

わかりましたので、ここで危険なほど再投稿に近づいていますが、私の状況は、この機能に関する他の多くのポスターとは少し異なります. 私は昔に書かれた DLL とやり取りしていますが、私が持っているのはファイルだけです。私は .lib ファイルを持っていないので、LoadLibrary および GetProcessAddress 関数を使用しています。MSDN Web サイトのチュートリアルに従って、基本的な構造を取得しました。DLL はプロジェクト フォルダにあります。コンパイルします。実行時に「hinstLib」の数値を取得しているので、DLL が見つかったと想定しています。「ProcAdd」変数の null 値を取得しています。他の投稿者は、extern C を DLL 関数に入れることで問題を解決しましたが、実際にはそのオプションはありません。言うまでもなく、私の知る限り、この DLL はプレーンな C で書かれています。私はインターフェイス ドキュメントを持っており、関数名が正しいことを確信しています (これらの目的のために一般的な例に置き換えました)。ProcAdd 割り当てが NULL になったため、正直なところ何も実行しませんでした。なぜこれが関数の割り当てに0の値を与えているのかについての考えは大歓迎です。注: 残念ながら、さまざまな理由により、DLL をアップロードできません。

}

0 投票する
1 に答える
3042 参照

dll - NULL を返す GetProcAddress

LoadLibrary と GetProcAddress を使用して dll をロードしようとしています。LoadLibrary は有効なハンドルを返しますが、GetProcAddress を呼び出すと NULL が返されます。GetLastError を呼び出すと、ERROR_INVALID_PARAMETER である 87 が返されます。GetProcAddress に渡す関数名がdumpbin /exports、dll で実行したときに返されるものと同じであることを確認しました。残念ながら、これは仕事用なので、実際のコードを含めることはできません。しかし、これは私が何をしているのかを理解してもらうために編集されたバージョンです。

SO や他のフォーラムで関連する質問をいくつか見てきましたが、通常、この問題は C++ の名前マングリングが原因です。表示されているものと同じ名前を使用しているので、dumpbinこれは私の問題ではないと思います。何か案は?

アップデート

問題を絞り込めたのではないかと思います。ターゲットには、この dll の古いバージョンが存在します (これは組み込みの WinCE ソリューションです)。しかし、必要な追加機能を備えた新しいバージョンの dll を使用する必要があります。残念ながら、古い dll を更新できません。この新しい dll と dll を使用するアプリケーションは、ターゲットにロードされる cab ファイルにパックされます。古いdllのいくつかの関数でGetProcAddressを試してみましたが、それらは機能しました。そのため、新しい dll へのパスを使用して LoadLibrary を呼び出しているにもかかわらず、実際には既にターゲットにある dll をロードしているだけのようです。これが起こることを誰かが確認できますか?

前の質問への回答

Windows CE が DLL をロードすると、DLL が既にロードされているかどうかを判断する際に、すべてのパス情報が無視されます。これは、名前が同じでパスが異なる DLL を一度しかロードできないことを意味します。さらに、拡張子 .cpl で終わるモジュールは、拡張子が .dll であるかのように扱われます。

ソース: http://msdn.microsoft.com/en-us/library/ms886736.aspx

0 投票する
1 に答える
429 参照

visual-c++ - 名前が正しくマングルされていても GetProcAddress が失敗する

.dll に次のコードがあります。

これは Visual C++ 2010 でコンパイルされているため、.def ファイルを含む .def ファイルもありますGetOptionID。関数がエクスポートされ_GetOptionID@4、dumpbin /exports を使用してマングルされていることがわかります。

別の実行可能ファイルで、次の存在を確認しようとしましたGetOptionID:

デバッガーでこのコードを実行すると、次のことがわかります。

  • LoadLibraryEx成功 - 私は有効に見えるhinst
  • GetProcAddress失敗 -lpです0x00000000
  • GetLastError127を返します

関数がエクスポートされていることがわかり、その名前が探しているエントリ ポイントと一致することがわかります。どうしてGetProcAddress失敗するの?