※ ChatGPTを利用し、要約された質問です(原文:VC++フォームアプリケーションにDLLをリンク2)
VC++フォームアプリケーションにDLLをリンク2
このQ&Aのポイント
VC++フォームアプリケーションにDLLをリンクする方法について教えてください
前回投稿したプログラムを修正したのですが、エラーが発生しています
プログラムを起動するとDLLが見つからないエラーが発生します
VC++フォームアプリケーションにDLLをリンク2
2日前に、同じタイトルで投稿した者です。
http://okwave.jp/qa/q7326569.html
その節は素晴らしい回答を頂きありがとうございました。
それを実現するように、作成して頂いたプログラムの修正に取り組んでいるのですが、うまく行きません。
どなたかお力をお貸し下さいm(>o<)m
前回の回答で、指摘されたように、LoadLibrary/GetProcAddress/FreeLibrary を用いて
作成して頂いたプログラムを修正しました。
具体的には、ボタンを押すとSecretFunc関数を呼び出すコードForm1.cppを以下のように修正しました。ビルドしても、エラーは出ません。
次に、このプログラムのReleaseフォルダー内のDLL_sample.dllを
前回、私が投稿したソースコード(http://okwave.jp/qa/q7326569.html)で作成したDLL_sample.dllと置き換えました。
そして、プログラムを起動(WinForm_sample.exe)すると、エラーは発生しないのですが、SecretFunc関数が見つけられず、プログラムの"No DLL"表示の方を通ります。
その原因が分かりません。
プログラムは全て、VC++2010ExpressEditionで作成しています。
もし、お分かりの方がいらっしゃいましたら、ご教授のほどよろしくお願いします。
//修正したForm1.cppのコード
#include "stdafx.h"
#include "Form1.h"
#include "DLL_sample.h"
#include <Windows.h>
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
namespace WinForm_sample {
System::Void Form1::btnCalc_Click(System::Object^ sender, System::EventArgs^ e) {
System::Double a, b;
if ( System::Double::TryParse(txtA->Text, a) && System::Double::TryParse(txtB->Text, b) ) {
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
//DWORD dwParam1;
//UINT uParam2, uReturnVal;
hDLL = LoadLibrary(TEXT("DLL_sample.dll"));
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,"SecretFunc");
if (!lpfnDllFunc1)
{
// call the function
double c = SecretFunc(a,b);
txtResult->Text = c.ToString();
// handle the error
FreeLibrary(hDLL);
//return SOME_ERROR_CODE;
}
else
{
// Initializes the variables to pass to the MessageBox.Show method.
txtResult->Text = L"No DLL";
}
} else {
txtResult->Text = L"不正な入力";
}
}
}
}
お礼
いやあ、こんなに遅い時間(早い時間?)に、ご対応頂き、まことにありがとうございます。 感謝、感激です。 ご指摘、まことにありがとうございました。自分の愚かさが恥ずかしいです。 本当に、ありがとうございましたm(>o<)m