LoadLibrary

解決


haru  2007-03-14 13:05:09  No: 64653  IP: 192.*.*.*

Visual C++ 2005 Express Edition マージ形式で下記のエラーが出ます。
始めたばかりでヘルプを見ても分かりませんでした。
どの様に修正すれば良いか教えて頂けると幸いです。

error C2664: 'LoadLibraryW' : 1 番目の引数を 'const char [16]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)

int main(int argc, char* argv[])
{
  HMODULE hDll;
  BYTE data = 0xFF;

  if ((hDll = LoadLibrary( "c:\\haru.dll")) != nullptr) {
         ....以下略

編集 削除
Blue  2007-03-14 13:09:53  No: 64654  IP: 192.*.*.*

>マージ形式


>if ((hDll = LoadLibrary( "c:\\haru.dll")) != nullptr) {
if ((hDll = LoadLibrary( TEXT("c:\\haru.dll"))) != NULL) {

参考
http://www.ruche-home.net/program/tips/tchar.php


nullptrは/clrオプションがついているときだけ使ったほうがいい(というかついてなしで使えるのかな?)
と思います。

編集 削除
haru  2007-03-14 14:18:42  No: 64655  IP: 192.*.*.*

ありがとうございます。

マージ形式  ===>  マネージ形式の間違いでした。

if ((hDll = LoadLibrary( TEXT("c:\\haru.dll"))) != NULL) {  は
エラーが出なくなりましたが、今度は
int main(int argc, char* argv[])  でエラーがでましたが
他で定義されている...様なので  main2 に変えたら
エラーは無くなりました。

質問事項のエラーは出なくなりました。  大変ありがとうございました。

編集 削除
yoh2  2007-03-15 00:24:36  No: 64656  IP: 192.*.*.*

ちょっと気になることが。

> int main(int argc, char* argv[])  でエラーがでましたが
> 他で定義されている...様なので  main2 に変えたら
> エラーは無くなりました。

それで、main2()は呼ばれていますか?
単に使われない関数を定義してしまっている気がします。

編集 削除
haru  2007-03-15 07:13:41  No: 64657  IP: 192.*.*.*

yoh2 さん、ありがとうございます。
はい、button1_Click  で呼び出す様に修正して
動作テストしました。

現在はまだ部分的なコードがビルド出来るかとかの勉強中でして
趣味のソフトとして動かすまでにはまだまだ修行が必要です。

Blue さん、ご指導、大変ありがとうございました。

今後ともよろしくお願いします。

編集 削除
Blue  2007-03-15 09:07:24  No: 64658  IP: 192.*.*.*

ちなみに、CLRなら
簡単な引数であれば DllImport を使った方が楽チンかもしれません。
(〜.libでリンクできればそれが一番簡単だけど。)

編集 削除
haru  2007-03-15 09:41:32  No: 64659  IP: 192.*.*.*

Blue  さん、ありがとうございます。
#include で試しても見たのですがC++のバージョン違いなのか
エラー続出でしたので止めて  LoadLibrary  を試していました。

編集 削除
Blue  2007-03-15 09:51:19  No: 64660  IP: 192.*.*.*

>#include で試しても見たのですがC++のバージョン違いなのか
>エラー続出でしたので止めて
そういうことでしたか。

ということで、やはりDllImportを使ったほうがいいかも。

文字列を扱わない(かつ__stdcall)場合

[DllImport("XXXXX.dll")]
static int add(int x, int y);

という記述をするだけで使えるようになります。

編集 削除
haru  2007-03-15 10:33:38  No: 64661  IP: 192.*.*.*

ありがとうございます。
一応は先に頂いた回答で動作していますが、いずれ
[DllImport("XXXXX.dll")]  の勉強させて頂きます。

編集 削除