#Importディレクティブを使って ActiveXDLLを組み込めば使えると思いますよ
VB側で
Public Function myRate(nper As Double, pmt As Double, _
pv As Double, Optional fv As Variant = 0, _
Optional due As Variant = 0, Optional guess As Variant = 0.1) As Double
Dim apr As Double
apr = Rate(nper, pmt, pv, fv, due, guess)
myRate = apr
End Function
クラスモジュールに記述します
クラス名を clsRateとして DLLを作成します
VC側のAfxStd.hなど プロジェクトの共通ヘッダなどで
#import "DLLのフルパス" no_namespace
#include <atlBase.h> // CComVariant用
VCのイベントハンドラで
struct InitCOM {
InitCOM() { CoInitialize( NULL ); }
~InitCOM() { CoUninitialize(); }
} g_Init;
_clsRatePtr serv;
HRESULT hr = serv.CreateInstance( __uuidof( clsRate ) );
if ( FAILED( hr ) ) {
AfxMessageBox( "FAILED" );
return;
}
double npr, pmt, pv, apr;
// 48回
npr = 48.;
// 月々 40000返済
pmt = -40000.;
// 元金 100万円
pv = 1000000.;
// 計算結果
apr = 0.0;
CComVariant fv, due, guess;
// 残価
fv = CComVariant( 0 );
// 期首:1/期末:0
due = CComVariant( 0 );
// 計算開始利率
guess = CComVariant( 0.12 );
serv->raw_myRate( &npr, &pmt, &pv, &fv, &due, &guess, &apr );
// 月レートに直して パーセントに換算
apr *= 12 * 100;
CString str;
str.Format( "%.2lf", apr );
AfxMessageBox( str );
と言った具合で使えますよ
お礼
大変参考になりました。 ありがとうございました。
補足
申し訳ありません。 原因は、VBでのDLL作成でのミスでした。 それを修正したことでC++での呼び出しは行うことができました。 本当にありがとうございました。