コールバックについて質問です。
delphi2005.NET版でメタファイルを処理しようとEnumMetaFileを使おう
としているのですが、「NUllReferenceException」となってしまいます。
また試しにEnumenhMetaFileでもやってみたのですが、同じエラーが
起きてしまいました。
コールバック関数の実装部にまで到達していないことまでは分かって
いるのですが、なぜいかないのか、初心者なのでよく分かりません。
試しに本にあったサンプルコードで、EnumFontFamiliesExWを使って、
他のコードを書いてみたのですが、そちらでは上手くいきました。
メタ関係のデリゲートは、何か変わった書き方等が必要なのでしょうか?
MSDN等を見ても、同じような書かれ方をしているように感じるのですが…
初歩的な質問と思いますが、どなたかご教授をお願い致します。
自分でもう少し調べてみました。
Win32でEnumMetaFileを実行してみたところ動くものを、
そのまま.NETに移行して(必要な部分は加えたつもりです)
実行したところ、やはりエラーとなってしまいました。
コードは以下のようにしてみました。
*****************************************************************
function WMFEnumProc(ADC: HDC; var AHandleTablePtr: THandleTable;var
ARecord: TMetaRecord;AObjects: Integer;
ALParam: LPARAM): Integer;
begin
try
Result := ALParam;
except
// 例外が発生した
Result := 0 ;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CallBack: TFNMFEnumProc;
error: DWORD;
metaHandle: THandle;
begin
CallBack := @WMFEnumProc;
metaHandle := GetMetafile('メタファイルを指定');
EnumMetafile(GetDC(0), metaHandle, CallBack, 1) ;
end;
*****************************************************************
静的DLLの利用を行って、動作させようとしているのですが、どうしても
上手くいきません。
どこがおかしいのかも分からないので、どなたかご教授頂きたいです。
お願いしますm(__)m
Delphi2005を持っていないので的はずれかもしれませんが・・・
EnumMetaFileは、16ビット版Windowsとの互換性のために提供されます、とあるので、.NETでは無理なのかもしれません。
EnumEnhMetaFileでもダメですか?
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpgdi/html/_win32_EnumMetaFile.asp
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpgdi/html/_win32_enumenhmetafile.asp
にしの様
ご解答ありがとうございます!的外れなんてとんでもないです。
EnumEnhMetaFileの方は、.NETFrameWork用に書き換えらえられ
そうなのは、msdnを見て分かってきました。
ちょっと試してみたいと思います!
しかし、できることならばEnumMetaFileを使いたいのです。
他のコード上で、WMFを処理する部分をそのまま使いたいが
ためなのですが、やはり無理なのでしょうか?
何度も連続書き込みをしてすいません。
EnumEnhMetaFileも上記のようなコードで試してみましたが、
同じ結果になってしまいました。
変更したところは
>ARecord: TMetaRecord;
ARecord: TEnhMetaRecord;
> CallBack: TFNMFEnumProc;
CallBack: TFNEnhMFEnumProc;
あとRect構造体を適当に設定して、という変更をしました。
どちらも、play(enh)metafileでスクリーンに描画することは
できていたので、emf(wmf)ファイルがおかしいとかは無いと思うのですが…
純粋にコードの間違いであればいいのですが、あまりに自分の力が
足りないために、皆目見当がつけれない状態です…(泣)
ツイート | ![]() |