- - PR -
[VC2005]VC++6.0のDLLへ配列のポインタを渡す方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-04-02 10:40
VC++6.0で作成したDLLを
VC++2005(C++/CLI)のアプリケーションから 呼び出す処理を作成しております。 DLLとのIF関数に 配列へのポインタを引数として渡す関数HogeFunc()があります。 short HogeFunc(long (* Ary)[10]); VC++2005(C++/CLI)からHogeFunc()を使用する場合、 array<long>^ CLI_Ary = gcnew array<long>(10); pin_ptr<long> CLI_Ary_Ptr = &CLI_Ary[0]; HogeFunc(CLI_Ary_Ptr); としたかったのですが、 'cli::pin_ptr<Type>'から'long (*)[10]'に変換できません。 とのエラーになります。 どのように渡せば良いのでしょうか? どなたかアドバイス頂けませんでしょうか? よろしくお願いします。 [環境] Visula Studio 2005 Professional Edition Visula C++ 2005 Windows 2000 | ||||
|
投稿日時: 2009-04-02 10:52
C++/CLI側も
long Ary[10]; ではやれないのでしょうか? やれなければ、memcpyとかしてコピーするか、 いっそのこと、DllImportでマーシャリングするとか。 (long (*)[10]に対応する型は知らん。) 純粋なC++でも long* と long (*)[size] は別の型です。 | ||||
|
投稿日時: 2009-04-02 18:00
Blue様
ご返答ありがとうございます。 少し教えて頂けないでしょうか? C++/CLI(マネージコード内)で配列を "long Ary[10];"の様に宣言し関数へ渡す場合は、 pin_ptrでアドレスを操作されないようにしなくてはいけないのでしょうか? それともHogeFunc(&Ary); の様に記述しても良いのでしょうか? pin_ptrを使う場合、どのように記述すれば良いのでしょうか? アドバイス頂けないでしょうか? C++/CLIに慣れていない物で初歩的な質問ですいません。 | ||||
|
投稿日時: 2009-04-03 15:50
マネージドの領域ではないので、C++と同じ記述です。
→pin_ptrは使わない。
ここで聞く前に実際に試してみては? C++の文法的には間違ってはいません。 | ||||
|
投稿日時: 2009-04-06 17:31
Blue様
アドバイスありがとうございます。 動作の確認ができました。 ありがとうございました。 自分でも試してみたのですが、 『コンパイルも通り、たまたま正常に動作した様に見えるが、 根本的に問題がある』 かもしれないと思い、 質問させて頂きました。 C++6.0からのソフトの移植を行っているため、 ネイティブとマネージコードが混在し、 どのように記述すれば問題ないのか迷っておりました。 どうもありがとうございました。 |
1