C#からC++DLLへ
- 題名: C#からC++DLLへ
- 著者: ひかり
- 日時: 2007/04/04 19:18:51
- ID: 19432
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: C#からC++DLLへ
- 著者: 渋木宏明(ひどり)
- URL: http://hidori.jp/
- 日時: 2007/04/04 19:40:03
- ID: 19433
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: C#からC++DLLへ
- 著者: ひかり
- 日時: 2007/04/04 20:14:03
- ID: 19435
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: C#からC++DLLへ
- 著者: ひかり
- 日時: 2007/04/04 20:23:56
- ID: 19436
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: C#からC++DLLへ
- 著者: 渋木宏明(ひどり)
- URL: http://hidori.jp/
- 日時: 2007/04/04 20:29:01
- ID: 19437
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: C#からC++DLLへ
- 著者: 渋木宏明(ひどり)
- URL: http://hidori.jp/
- 日時: 2007/04/05 7:51:11
- ID: 19438
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: C#からC++DLLへ
- 著者: ひかり
- 日時: 2007/04/05 10:53:42
- ID: 19439
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
いつもいろいろと参考にさせて頂いております。
現在C#でアプリを書いておりまして
それにC++で作成したDLLを読み込ませ、
C#アプリからウインドウズハンドルを
渡そうとしているのですがうまく渡せません、、、。
C#側(TEST.exe)----------------------------
class ImportdDll
{
[DllImport("jisaku.dll")]
unsafe public extern static byte* kansu(IntPtr hwnd);
}
unsafe private void btn_Click_1(object sender, EventArgs e){
IntPtr gethandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
byte* testreturn = (byte*)ImportdDll.kansu(gethandle);
}
C++DLL側(jisaku.dll)----------------------
EXPORT BOOL WINAPI kansu(HWND hwnd)
{
(略)
return true;
}
------------------------------------------
そのまま実行すると
エラー内容--------------------------------
'System.AccessViolationException' のハンドルされていない例外がTEST.exe で発生しました。
追加情報: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
------------------------------------------
と言われてしまいます。
確認したことは、C#側からDLL側へは確かに何らかの同じ値が渡っています。
具体的にはgethandle="0x0002092c"といった値でこのメモリは
exeファイルのファイルパスの途中をさしてました。
(おそらくでたらめなアドレスなのだと思います)
あとウインドウハンドルを取ってくるのにFindWindowも使いましたが
結果は同じでした。
(DLL内からもFindWindowで取ってみましたが同じ値を指してました)
ネット上を結構探したのですがウインドウハンドルを取るようなことを
してることが少なくなかなか思うように取って来れません。
(もしかすると根本的にC#の扱い方を間違ってる?)
C#は初心者でよく分からず、かなりハマってて参ってます。。。
どなたかヒントになるようなことでも構いませんので教えて頂ければと思います。
また設定などの情報が不足しているようでしたら書き込みますので
指示して頂ければと思います。
以上、よろしくお願いします。