Borland社のコンパイラを使ったDLL
C++BuilderでDLLファイルを使っておりますが、Vectorコンテナの値をコールバック出来ませんでした。Vectorコンテナを使ったコールバックを可能とする記述方法を教えてください。
Edit1には、思惑通りに102が返ります。Edit2には、1が、Edit3には2が返ります。この例では、201、202を返したいのです。
本体側
#include <vector>
・
・
extern "C" __declspec(dllimport) int __stdcall test(int*,vector<int>);
#pragma package(smart_init)
#pragma resource "*.dfm"
using namespace std;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
vector<int> b;
b.push_back(1);
b.push_back(2);
int *a;
*a=1;
Edit1->Text = IntToStr(test(a,b));
Edit2->Text = IntToStr(b[0]);
Edit3->Text = IntToStr(b[1]);
b.clear();
dll側
extern "C" __declspec(dllexport) int __stdcall test(int*,vector<int>*);//コンテナの引数の実験
・
・
//-----------------------------------------------------------------------------
int __stdcall test(int *a,vector<int> &b)
{
//dllの引数の可能性の実験
for(unsigned int i;i<b.size();i++){
b[i] +=200;
}
*a+=1;
return *a+100;
}
//-----------------------------------------------------------------------------
お礼
有難う御座いました。Form1 -> という宣言をすれば良かったのですね。とても勉強になりました。