C++Builder相談室 Part15
■ このスレッドは過去ログ倉庫に格納されています
0319デフォルトの名無しさん
2005/10/12(水) 23:24:55mosaic.dllという渡された*TCanvasに描画するdllを作りました。
extern "C" __declspec(dllexport) void mosaic(TCanvas *Canvas,DynamicArray<TRect> &Rect,int rectnum,int pixelsize){
ほげほげ
}
そして、呼び出し側のプロジェクトにその際に出来たmosaic.libを追加し、
プロジェクトのオプションの遅延ロードするdllにmosaic.dllを追加、
呼び出し側に
extern "C" __declspec(dllimport) void mosaic(TCanvas *Canvas,DynamicArray<TRect> &Rect,int rectnum,int pixelsize);
と記述して、
Graphics::TBitmap *MyBitmap;
MyBitmap=new Graphics::TBitmap;
このへんでビットマップ初期化〜描画
MosaicRectはRectクラスの動的配列
mosaic(MyBitmap->Canvas,MosaicRect,MosaicRect.Length,8);
などと呼び出しています。
一見うまくビットマップが処理されるのが画面でもわかるのですが、
一度でもdllの中で関数が渡す*Canvasのプロパティを変更したりメソッドを
使ったりすると
(例えば、Canvas->Brush->Style=bsSolid; の一行だけ実行してreturnするようにdllを書き換えても)
呼び出し側で
delete MyBitmap;
のところで例外が発生してしまいます。
ここであえて解放しなければプログラムは所定の目的どおりの動作をするのですが、
気持ち悪くてしょうがありません。
どうしてこうなってしまうのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています