トップ回答者
DLLないで定義された型をしようするには如何すればよいのでしょうか?

質問
回答
-
DllImportは使用せず、参照の追加でDllを指定し
usingでクラスを追加しています。CLR プロジェクトで DLL を作っているのでしょうか?
C++での宣言はdouble*です、コードは以下の通りです
CLR プロジェクトであれば、double% などで受け取って、pin_ptr を使う手法が考えられます。
http://ml.tietew.jp/cppll/csharpll/article/361
http://msdn.microsoft.com/ja-jp/library/1dz8byfh.aspx
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
すべての返信
-
HongLiag様
ありがとうございます。
C#にて定義し使用できました。
追加でもうしわけありませんが、質問があります。
C++で作成したDLLのメソッドがポインタを使用する場合、どうすればよいのでしょうか。
double*でパラメータを設定しなくていけないので、
doublel a で宣言し、パラメータ設定時に ref a と設定したのですがエラーがでます。
ポインタを使用するには、unsafeコンテキストのみで使用可能とでます。
unsafeを調べたのですが、使用しないほうがよいなど多々見られました。
unsafeを使わない方法をご存知であれば、ご教授お願いいたします。
-
C++で作成したDLLのメソッドがポインタを使用する場合、どうすればよいのでしょうか。
double*でパラメータを設定しなくていけないので、
doublel a で宣言し、パラメータ設定時に ref a と設定したのですがエラーがでます。エラーや例外が出たのであれば、出たという事実だけでなく、どういったものが出たかを示すべきでしょう。(エラーメッセージなど)
ちなみに、ref をつけたのは呼び出し側だけでなく、宣言にもですよね?
[DllImport("hoge.dll")]
private static extern void Test(ref double a);Test(ref b);
ところで、その double のポインタは、配列の先頭アドレスではないですよね?
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。 -
回答ありがとうございます。
エラーコードですが、ref double から double*に変換できません と出てしまいます。
DllImportは使用せず、参照の追加でDllを指定し
usingでクラスを追加しています。
C++での宣言はdouble*です、コードは以下の通りです
long ConvAb(long ViewID, long mode, double *lon, double *lat, cona utm1, EnumUTMDistUnitWrap DistUnit)
{
cona * utm = new cona ();
long ret = instance->ConvLatLonToUTM( ViewID, mode, lon, lat, *utm, (EnumUTMDistUnit) DistUnit);
utm1.m_iSize = utm->size();
utm1.m_pszStr = (char *)utm->data();
return ret;}
unsafeを使用し出来たのですが、やはりこの方法しかないのでしょうか?
-
DllImportは使用せず、参照の追加でDllを指定し
usingでクラスを追加しています。CLR プロジェクトで DLL を作っているのでしょうか?
C++での宣言はdouble*です、コードは以下の通りです
CLR プロジェクトであれば、double% などで受け取って、pin_ptr を使う手法が考えられます。
http://ml.tietew.jp/cppll/csharpll/article/361
http://msdn.microsoft.com/ja-jp/library/1dz8byfh.aspx
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。