C++で作ったDLL関数はIntを返します。
※返される値は、Intではあるものの、中身は16bitの値です。
これをC#のText Boxに表示するため、以下のようにし、Timerを掛けて読んできてます。
【C#でのCode内容】
[DllImport("API_ver1.0.0.dll", CallingConvention = CallingConvention.StdCall)] public static extern int GetData(); tBox_Angle.Text = Convert.ToString(DLLimpo.GetData());
【DLL側のメソッド】
extern "C" DllExport int __stdcall GetData(); int __stdcall GetData() { static int buff; while (1) { oApi.Receive(0, &MSGbuff); buff = MSGbuff.Parameters[0]; return buff; } }
しかし、正の値は正しく表示されるが、負の値が正の値として表示されてしまいます。
例えば、-1474であれば、64061と表示される。
負の値がちゃんと表示されるようにするためにはどうすれば良いでしょうか。
16ビット整数(short)の符号拡張の問題ですが、正確な回答のためにも「DLLimpo.GetData()」のシグネチャ(メソッドの型、変数の宣言の仕方)を示してください。P/Invokeで呼び出しているのであれば、その宣言もお願いします。
C#にもshort型はあります。
short aaa = -1474;
label1.Text = Convert.ToString(aaa); // aaa.ToString()でも可
で、そのまま「-1474」が表示されました。
戻り値で何か間違えていませんでしょうか?
本文にSourceを追記しました。
※コードを質問文に提示するときは、マークダウンを使ってください。
C++のDLL側のGetDataですが、C言語でいうプロトタイプ宣言で、返り値の型はint なのでしょうか。(signed)short型であれば既にコメントや回答をいただいているように、C#側でもshortを使うべきです。
tBox_Angle.Text = Convert.ToString((short)DLLimpo.GetData());
で解決できました。
初歩的な質問ですみませんでした。
解決できた場合は既にいただいている回答にコメントなり、自己解決として回答するなりして、質問を閉じていただけますようお願いします。
回答1件
あなたの回答
tips
プレビュー