• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBからDLL(VC)を呼び出すと戻り値が不正)

VBからDLL(VC)を呼び出すと戻り値が不正

このQ&Aのポイント
  • VCで作成したDLLをVBから呼び出すと、正常な値が取得できない問題が発生しています。
  • VCの単体実行では正常な値が取得できていることを確認済みですが、VBの戻り値として取得すると不正な値が返ってきます。
  • 解決策をご存知の方は教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

えーっと、私、勘違いしているかも。。。 > VCを単体で実行すると「9.999999」というformatで これは単に format という話で、C側ソースの "printf("CpuUsage:%.02f%\n", CpuUsage);" の結果は、 "CpuUsage:-92559628897359297000000000000000000000000000000000000000000000.00" となるということですね??Σ(・ε・;) これら2つ数値は、表示形式こそ違うものの、値は同一です。(C側ソースの "%.02f" を "%g" に変えると、 XXE+YY の形式で表示されると思います) MsgBox にて、数字の羅列形式で表示する方法なんですが、、、ちょっとすぐにはわかりません。 申し訳ないです。。

yamataro25
質問者

お礼

kocha1979さん お礼を言うのが遅くなり大変すいません。 初心者の私には勉強になりました。 結果的には解決できませんでしたが 取り合えずVBでWMIを使用し実装しました。 ありがとうございました。

その他の回答 (2)

回答No.3

No.2に対する自己補足です。(;´Д`) > VCで作成DLLをVBでCallし戻り値を取得していますが > 正常にとれません。 関数の戻り値は正常にとれていて、C側"printf"関数での表示と、VB側"MsgBox"関数での表示で、表示形式が異なっているだけかと思われます。

回答No.1

> VBの戻り値として取得した場合「-9.25596288973593E+61」となってしまいます。 とは、メッセージボックスでの表示でしょうか?? 質問が微妙に曖昧ですが、試してみました。 環境は VisualStudio .NET 2003 Pro --- DLL側 --- BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } extern "C" __declspec(dllexport) double GetCpuUsage(void) { double CpuUsage = 9.999999; return CpuUsage; } --- VB側 --- Public Class Form1 Inherits System.Windows.Forms.Form Private Declare Function GetCpuUsage Lib "CPUUsage.dll" Alias "GetCpuUsage" () As Double (中略) Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ret As String ret = GetCpuUsage() MsgBox(ret) End Sub End Class 結果は、メッセージボックスに正しく 9.999999 と表示されますね。

yamataro25
質問者

お礼

KOCHA1973さん、アドバイス有難うございます。 環境を記載しておりませんでした申し訳ありません。 環境は、VisualStudio6.0です。 私もKOCHA1973さんと同様にC側の関数戻り値に 9.999999とセットした場合は正常にうまくいく 事を確認できました。 但し、Statistics.max.doubleValueの値を戻り値 にセットするとうまくいきません。 VB側で確認したというのはメッセージボックスで 確認しました。 Statistics.max.doubleValueの値はVB側では受け 取れないのでしょうか? 現在、VB側ではStringで受け取ろうとしており ますが、Double型でも同様の事象が発生しており ます。 Statistics.max.doubleValueで取得した値が 受け渡し可能かどうかご存知ないでしょうか。