[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 03/14 21:05 / Filesize : 161 KB / Number-of Response : 689
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっとC#,C♯,C#(初心者用) Part26



1 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 11:07:29 ]
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ

ふらっとC#,C♯,C#(初心者用) Part25
pc11.2ch.net/test/read.cgi/tech/1204104280/

529 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:09:47 ]
キャストすればいいんじゃね?

530 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:24:51 ]
なんでobjectで受け取ってるのかが問題だな

531 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:30:23 ]
そのキャストの仕方や受け取り方がわからない
Listview lv = (ListView) sender;とかと同じ理屈だとは思うのですが・・・
()の中に何を入れてよいのかわかりません

532 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:33:31 ]
Aだろ。

533 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:39:04 ]
あぁ、一生懸命classとか入れていました・・・。
例えばこのobjectがどのクラスか不明だった場合はどうしたら良いのでしょうか?

534 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:41:59 ]
どうしたいんだよ?

535 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:43:13 ]
先にc#の仕様を一通り理解すれば全て解決するパターンだな。

536 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:53:20 ]
>>533
どのクラスか不明って少なくともA_C()を実装してるクラスが一番の大元だろう?
そのクラスにキャストしれ
っつか、そのクラスで受け取れよ。

537 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 09:57:37 ]
というか、そもそも何をしたいのかがよくわからん。



538 名前:533 mailto:sage [2008/04/05(土) 10:03:27 ]
えっと、自分が使いやすいようにまとめてある非同期ダウンロードのライブラリ的なものがありまして
ダウンロード完了時のイベントを呼び出し元で側で受け取りたいのです。
感じとしては以下のような形です。

public Download(string uri, string filepath,object obj)
{
if (dc == null)
{
dc = new WebClient();
dc.DownloadFileCompleted += new AsyncCompletedEventHandler(obj.DownloadCompleted);
}
dc.DownloadFileAsync(new Uri(uri), filepath);
}


539 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 10:07:20 ]
objectじゃなくてAsyncCompletedEventHandler受け取れば済む話じゃね?
つか普通そのオブジェクトがイベントを伝播する形にするんじゃね?

540 名前:533 mailto:sage [2008/04/05(土) 10:16:03 ]
言葉を知らないから説明できない
もやっとぼーるを投げます
お騒がせしました

541 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 10:43:33 ]
よくわからんが特定のメソッドを呼び出したいんだと予想。
で、いろんなパターンがあって、全てのクラスに共通する基本クラスは作成できないと解釈。

呼び出したいメソッドを定義したインターフェイスを作って、
それぞれのクラスでそのインターフェイスを実装。
メソッドのパラメータはそのインターフェイスの型の型にする。

デリゲートで使えるかどうかはしらん

542 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 11:30:10 ]
デリゲートかイベントで十分

543 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 11:31:47 ]
>>538
MethodInfoあたりでも使えば、問答無用で好き放題できるだろうけど
その前に可能であればC#らしいスタイルを追求したいと思う自分がいる。

1.呼び出してほしいインターフェイスを定義して、呼び出されたいクラスが実装する。
 Downloadが完了次第、Downloadを持つクラスがそれを呼び出す。
 参照が無くなったりDisposeされたりといった問題があるなら、それを加えてもう一度やりたい事をここで説明。

2.主従関係を逆転して考えてみる。
 Download を持つクラスに event を定義して、呼び出されたいクラスがコンストラクタ等で自ら登録する。

3.MethodInfo を使って、まさに当初の質問通りの処理をする。

544 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 11:44:05 ]
この辺読め
msdn2.microsoft.com/ja-jp/library/ms228969(VS.80).aspx

545 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:17:31 ]
アンマネージドのC++で作ったDLLの関数をC#で使いたいのですが
DLL 'testdll.dll' の 'f'' というエントリ ポイントが見つかりません。
と例外が出てしまいます。
やり方が間違っているのでしょうか?
DLL側は
class c
{
 public:
 static __declspec(dllexport) int f();
};
int c::f()
{
 return 777;
}
C#側は
using System.Runtime.InteropServices;
using System;
namespace ConsoleApplication1
{
 class Program
 {
  [DllImport("testdll.dll")]
  public static extern int f();
  static void Main(string[] args)
  {
   Console.WriteLine(f());
  }
 }
}
こんな感じになってます。
testdll.dllとtestdll.libはC#側のフォルダに入れてます。

546 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:28:20 ]
>>545
C++側のインターフェイスをCスタイルで書いてextern "C" とする。
C++の識別子は、どのようなスタイルになるのかはアンマネージドの範囲でも一切保障されない。

547 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:33:31 ]
>>545
C++側をcomで作って、C#側はプロジェクトの参照設定よりdllを追加(COMタブより追加可能)



548 名前:533 mailto:sage [2008/04/05(土) 12:44:25 ]
主従関係に困惑したりしながら色々と試行錯誤していたのですが読み出す時にイベントを付加する事にしました。
でも、今度は何のダウンロードが完了したのかわからない。未だに見慣れないのですがMSDNと格闘してきます!。

AsyncCompletedEventHandler e = new AsyncCompletedEventHandler(this.DownloadCompleted);
FileDownload(path, filepath, e);

public void DownloadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
System.Net.WebClient m = (System.Net.WebClient)sender;
//m.download_url = ???
}



549 名前:545 mailto:sage [2008/04/05(土) 12:49:16 ]
>>546
extern "C"{
 __declspec(dllexport) int f()
 {
  return 777;
 }
}
DLLをこう書き直したのですが結果は変わりませんでした。
これはCスタイルではないって事でしょうか??

550 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:53:07 ]
__stdcall

551 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:54:55 ]
>>549
CallingConventionを合わせる

552 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:58:28 ]
>>548
まずC++をしっかり勉強してからの方が無難かもしれないね。

553 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:59:29 ]
>>552 はアンカミス >>548 -> >>549

554 名前:545 mailto:sage [2008/04/05(土) 13:47:47 ]
>>550
extern "C"
{
 int __declspec(dllexport) __stdcall f();
}
int __declspec(dllexport) __stdcall f()
{
 return 777;
}
DLLをこう変更しましたがだめでした。
DLL側のコードを書いてくれませんか?

555 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 13:57:53 ]
とりあえずCOMとIDLについて軽く勉強した方がよくね

556 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 14:05:22 ]
P/InvokeにCOMもIDLも関係ないだろ。適当教えるなよ

557 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 14:09:12 ]
dumpbin /exports
でdll調べてみたら



558 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 14:10:40 ]
>>554
C:\>type test.cpp
extern "C" __declspec(dllexport) int f() {
return 777;
}

C:\>type test.cs
using System;
using System.Runtime.InteropServices;
namespace Test {
class Test {
[DllImport("test", CallingConvention=CallingConvention.Cdecl)]
static extern int f();
static void Main() {
Console.WriteLine(f());
}
}
}

C:\>cl /LD /nologo test.cpp
test.cpp
ライブラリ test.lib とオブジェクト test.exp を作成中

C:\>csc /nologo test.cs

C:\>test
777

559 名前:545 mailto:sage [2008/04/05(土) 16:14:51 ]
>>558
/nologoと付けたら出来ましたが、IDEからビルドすると例外エラーです。
皆さんはアンマネージドのC++でDLLを作ってC#とかから呼び出したりしないんですか?

560 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:21:03 ]
>>559
ふつーは .def 使ってエクスポート名をきちんとしておく。

561 名前:560 mailto:sage [2008/04/05(土) 16:27:33 ]
つまりこういうことな。

//test.cpp
extern "C" int __stdcall f() {
 return 777;
}

//test.def
LIBRARY
EXPORTS
 f

//test.cs
[DllImport("test.dll")]
int f();



562 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:31:31 ]
>>559
俺だったらC++/CLIで作る

563 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:55:54 ]
>>561
コンパイルすら通らないんですが。。
//test.cpp
extern "C" __declspec(dllexport) int f()
{
 return 777;
}
//test.def
LIBRARY "testdll"
EXPORTS
 f
//test.cs
using System;
using System.Runtime.InteropServices;
namespace Test
{
 class Test
 {
  [DllImport("testdll")]
  static extern int f();
  static void Main()
  {
   Console.WriteLine(f());
  }
}
こうですか?
それでも例外出ますね。


564 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:15:55 ]
>>563
あーごめんC#側で extern と static いるの忘れてた

とりあえずそのコードだとC側の呼び出し規約が間違ってる。def使う場合
dllexportはいらない

565 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:19:39 ]
まずは、dumpbin 使え。

566 名前:564 mailto:sage [2008/04/05(土) 17:20:20 ]
ごめんもう一個
.defはリンカの設定に追加する必要がある。VSは作ったら勝手にやって
くれた気もするが

567 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:21:52 ]
>>565
Dependency Walkerでもいいけどな



568 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:51:54 ]
>>566
モジュール定義ファイルにtest.defを追加すればいいんですかね??
それでもビルド出来ないんですが。。
error C3872: '0x3000': この文字を識別子で使用することはできません
error C2065: ' return' : 定義されていない識別子です。
error C2143: 構文エラー : ';' が '定数' の前にありません。

569 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:53:19 ]
一行ヒントしか書かないやつは分からないのに答えてる法則。
そしてその後に関連される単語が出てくると「だから>>○○で言っただろ」と得意気な顔をするw

570 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:55:23 ]
>>568
それ全角スペースだろ死ねよ。

571 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:59:11 ]
まじ、dumpbin知らないってことか?
DLLの情報見れば解決する話だろうが。

572 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:00:06 ]
1行ヒントはクグればすぐ分かるということだろう。

573 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:05:55 ]
たった1行のコマンド実行するだけなのに、無視する理由が分からん。

574 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:08:43 ]
>>568
そこかよorz
そのコードインデントに全角スペース使ってるからインデントは
そのままコピペするんじゃなくてタブか半角スペースにきちんと
置換してくれ

>>571
dumpbin 使おうが Dependency Walker 使おうがエクスポートされた
名前は見れるけど、「どうやってその名前を作るの」がわからない、
つまり確認しか出来ないから直接解決にならんだろ
まぁそれらを知っておいてかつ確認ぐらいはしてほしいがマジで
まぁふらっとだから

575 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:15:20 ]
>>573
全角スペースを使うぐらいだから、コマンドプロンプトの使い方が分からないんだよ。

>>574
その名前で呼び出せば使えるんだから、命名規則の仕様まで分からなくてもいいと思うが。

576 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:18:13 ]
>>575
あそっか。C#側いじればいいのか。

577 名前:545 mailto:sage [2008/04/05(土) 18:20:34 ]
>>574
ありゃ。恥ずかしい><
全角混じってるだけでした。
ですがC#側で呼び出せません。。
むぅ…



578 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:21:56 ]
>>577
だから呼び出し規則あわせろってずっと言ってるだろ。
今のコード貼ってみろよ

579 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:22:12 ]
>>575
それじゃ根本的な解決になってないだろ

580 名前:545 mailto:sage [2008/04/05(土) 18:25:29 ]
>>578
どこでそんなこと書いてありますか?
//test.cpp
extern "C" int __stdcall f()
{
 return 777;
}
//test.def
LIBRARY
EXPORTS
f
//test.cs
using System;
using System.Runtime.InteropServices;
namespace Test
{
 class Test
 {
  [DllImport("test.dll")]
  static extern int f();
  static void Main()
  {
   Console.WriteLine(f());
  }
}
今のコードはこうです。
DLL側とC#側のコード貼ってください。

581 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:26:44 ]
動けばいいんじゃないの?

582 名前:545 mailto:sage [2008/04/05(土) 18:28:05 ]
C++で作ったDLLをC#で呼び出すときに皆さんはわざわざコマンドプロンプトを使うんですか?
ツールを使って名前を調べて呼び出したりするんですか?

583 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:29:42 ]
こいつ何言ってんだ。DLL中身みないでどうやって名前調べるんだよ。
もしかしてスピリュアルってやつ?

584 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:35:34 ]
>>582
当たり前だろ。

dumpbin /exports test.dll
の結果見せろよ。

585 名前:545 mailto:sage [2008/04/05(土) 18:38:41 ]
えと、何か勘違いしてるかもしれないのでご指摘ください。
イメージとしてはWin32APIを呼び出すときのように使いたいのです。
[DllImport("user32.dll")]
extern static int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY);
こんな感じで呼び出して利用できました。
なので自作のDLLも同じように出来るのかな?と思ったわけです。

C++のDLLをC++で呼び出したり、
C#のDLLをC#で呼び出すときは楽なのに、
マネージドからアンマネージドを呼び出すのは大変ですね…。

586 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:39:14 ]
>>584
あんまりいじめるな。
お前がコード張ればいいだろ。

587 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:39:34 ]
>>580
それコンパイルしたら普通に上手く動くぞ。
お前さんのやり方に問題があるとしか思えん。



588 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:40:29 ]
>>586
俺は>558ではった

589 名前:545 mailto:sage [2008/04/05(土) 18:42:49 ]
>>587
ありゃ。
もう一度新規プロジェクトからやり直して見ます!

590 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:46:35 ]
>>561 だが・・・うーん、これでexport 出来るはずなのよね。
別の原因の気がするので

・dumpbin の結果
 VS のコマンドプロンプト(たぶんスタートメニューのツールの
 下あたりにある)を起動して、生成した C++ な DLL に対して
 dumpbin /EXPORTS "test.dll"
 みたいにしてその結果を張ってください

・探索ロケーション周り
 当然 C# な exe と C な DLLは同じフォルダにないとダメですよ。

あたり確認してみてくれ

591 名前:545 mailto:sage [2008/04/05(土) 18:56:11 ]
>>590
両方ともプロジェクト作り直したら通りました;
dumpbinの結果は
File Type: DLL
Section contains the following exports for test.dll
00000000 characteristics
47F74A82 time date stamp Sat Apr 05 18:46:42 2008
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001000 f = _f@0
Summary
1000 .data
1000 .rdata
1000 .reloc
1000 .rsrc
1000 .text
こんな感じでした。お騒がせしました><
DLLは作ったことないので色々いじって見ます。

592 名前:545 mailto:sage [2008/04/05(土) 18:59:29 ]
>>590
あ、すみません、言い忘れてました。
ありがとうございました!

593 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:01:31 ]
>>582
人の作ったDLLなら見る。
だって、C/C++のヘッダを見ただけでは分からないこと(修飾名)があるから。

WindowsシステムのDLLはそれがもう分かっているし、
585のように単純にDllImportを書くだけで使えるようになっているから見ない。

自分で作ったDLLも見ない。どうなっているかは自分で決めた通りなのだから、
調べるまでもない(思い通りになっているかを確認することはあるが)。

594 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:05:01 ]
自分で決めても見つからないとエラー出たら見るしかない。
今回はこのパターン。

595 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:12:33 ]
>>593-594
ほぅほぅわかりやすい。
勉強になりました。

596 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:16:48 ]
うぁっ、C++呼び出しの人まだやってる、C++使えないのなら無理して使うなよwww
一応コマンドラインに落ちなくても全部IDE上でできるが
詳しい知識がないと、VSのバージョンが上がったら手が付けられなくなるぞ。

597 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:20:54 ]
手が付けられへんってどんだけレベル低いねん。



598 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:23:07 ]
あれのレベルの低さは見ての通りじゃん、どう考えても相互運用コードが作れるレベルじゃない。
説明した通りに書かせればその分についてのみは動くだろうけど

599 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:26:52 ]
無理して、…っていうか興味を持ったからです。
一度動いてからわからないものを調べて学ぼうと思っただけです。
今日はこれをやるって決めたんです!

600 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:28:58 ]
>>599
まずはC++のリンクの仕組みを確り勉強するといいよ、いきなり吹っ飛ばしてC#とリンクとか無茶だから。

601 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:30:29 ]
まずはアセンブラからだな。

602 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:31:10 ]
まずは機械語からだな。

603 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:31:33 ]
>>601
そこまで行かなくてもいいと思うけど、LIBの仕組みDLLの仕組み程度は知っておいて欲しい。

604 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:31:43 ]
お前らどんだけ博識なんだよバカ

605 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:32:18 ]
呼び出し規約って機械語レベルの話だからなぁ。若い人は辛いだろう。

606 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:14:06 ]
とはいっても個々の呼び出し規則の詳細が必要になることなんて少なくなったから、
いろいろあるんだぐらいに思っとけばいいだろう。

607 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:22:02 ]
スタックの積み方と後始末の責任の所在程度の違いだから難しくないと思うが



608 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:27:05 ]
うんまあ、むしろその程度のことを理解するのに苦労した粗雑な頭の自分を語ってるように聞こえるね。

ついでに、「自分以外・自分の世代以外は全員馬鹿」っていうのは
濡れ落ち葉族のオッサンのセリフみたいで惨めだなw

609 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:29:05 ]
そんなにくやしかったのか

610 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:29:18 ]
うん

611 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:36:11 ]
using 赤い彗星 = System.Char;

612 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:49:25 ]
using 浅野忠信の嫁 = System.Char;

613 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:56:37 ]
using ギタリスト = System.Char;

614 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 22:11:16 ]
それVBのコードとしても変じゃないか?
VBとc#のあいのこのつもりか?w

615 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 22:13:18 ]
どれもコンパイル通るよ

616 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 22:16:20 ]
通してなんになるのかって話ではあるけどなw

617 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 22:43:59 ]
仕事でJava覚える必要が出てきたが、C#と大体同じなのだろうか・・・?



618 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 22:47:33 ]
C#にあってJavaにない機能を把握するだけ

619 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:06:19 ]
じゃあJavaからC#に移るときは?

620 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:09:32 ]
>>618

621 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:00:03 ]
基本ができてればどんな言語使っても関係無いだろ

622 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:09:48 ]
そうだけどJavaのジェネリクスだけはどうしても許せない

623 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:15:07 ]
Javaだったらエクリプスで開発するんか

624 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:18:18 ]
スレタイ嫁

625 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 01:11:05 ]
シングルスレッド内のForm間でメッセージ送るときってどうやるんですか?
二つのformが表示されていて、一つのformが他方のformに
おれはこんな処理やったよってのを知らせたい。

626 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 01:26:57 ]
イベント

627 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 01:30:31 ]
どうもです。イベントでやってみます。



628 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 02:14:31 ]
ポインタを伴うWin32APIの呼び出し方が解りません。VB.NETでは

Module Module1
Friend Declare Unicode Function LoadLibraryW Lib "kernel32.dll" (ByVal lpLibFileName As String) As Integer
Friend Declare Function FreeLibrary Lib "kernel32.dll" (ByVal hModule As Integer) As Integer
Sub Main(ByVal Args() As String)
Dim hModule As Integer = LoadLibraryW("C:\WINDOWS\Resources\Themes\Luna\luna.msstyles")
(以下略)
でhModuleにハンドルが入りますが、C#で同じように

class Program {
[DllImport("kernel32.dll")]
internal static extern int LoadLibraryW(string lpLibFileName);
[DllImport("kernel32.dll")]
internal static extern int FreeLibrary(int hModule);
static void Main(string[] args) {
int hModule = LoadLibraryW(@"C:\WINDOWS\Resources\Themes\Luna\luna.msstyles");
(以下略)
としても必ず失敗(0)してしまいます。原因は何でしょうか。

629 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 02:19:40 ]
GetLastErrorを取得して見る。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<161KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef