LOG_PBH::Term
「LOG_PBH::Term が呼ばれる前に Init が呼ばれた」
以下の様なコードで,PBH::SetDefaultPenBrush() が呼ばれていないと,デバッグウィンドウに表示される.
{
LOGPEN lp ;
LOGBRUSH lb ;
PBH::GetHatchPenBrush(pDC,GetPBH(), &lp,&lb) ;
CPen pen ; pen.CreatePenIndirect(&lp) ;
CPen* oldPen = pDC->SelectObject(&pen) ;
CBrush brush ; brush.CreateBrushIndirect(&lb) ;
CBrush* oldBrush = pDC->SelectObject(&brush) ;
Parts::Draw(pDC,prj,scale) ;
pDC->SelectObject(oldPen) ;
pDC->SelectObject(oldBrush) ;
PBH::SetDefaultPenBrush() ;
}
PAtoMHD.AsPln2D を …
PAtoMHD.AsPln2D を IIS のコンポーネントとして登録.
DrawVer.asp
<%@ Language=VBScript %>
<% Option Explicit %>
<HTML>
<BODY>
<%
dim oToPA
set oToPA = Server.CreateObject(“PAtoMHD.AsPln2D”)
Response.Write oToPA.GetVersion
set oToPA = Nothing
%>
</BODY>
</HTML>
実行すると,
エラー タイプ
Server オブジェクト, ASP 0178 (0x80070005)
許可を確認中に Server.CreateObject の呼び出しに失敗しました。このオブジェクトへのアクセスは拒否されます。
/Test/DrawVer.asp, line 7
「コンポーネント サービス」-「DCOM の構成」で「セキュリティ」タブ内の設定.
IIS を再起動する
以下の様にしていると
set oMICS = Server.CreateObject(“AsMicsS.Application”)
set oToPA = Server.CreateObject(“PAtoMHD.AsPln2D”)
PAtoMHD.exe は IUSR_DEVXP となるが,AsMicsS.exe は SYSTEM でリフレッシュ毎に起動されてしまっている.
どうも,PAtoMHD.Application などの場合に複数起動されているみたい.
IUSR_~ と SYSTEM の違いはよくわからない.
VC 6 MFC でオートメーション利用
「Class Wizard」-「クラスの追加」-「タイプライブラリから」
InitInstance 内の追加のコード
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
{ // 利用をこのブロックにまとめてます
AfxOleInit() ;
IAsPln2D to2D ;
if (!to2D.CreateDispatch(_T(“PAtoMHD.AsPln2D”))) {
return FALSE ;
}
CString selFile = to2D.BrowseFile(_T(“.\\*.mhd”),_T(“mhd を選択してください”)) ;
if (!selFile.IsEmpty()) {
if (to2D.Load(selFile)) {
to2D.Save(selFile+_T(“.svg”)) ;
}
}
return FALSE ;
}
CTestDlg dlg;
…
#import を利用する方法
アプリケーションクラスのソースに
#import “C:\…\SVG\PAtoMHD\Release\PAtoMHD.tlb”
InitInstance に
{
AfxOleInit() ;
PAtoMHD::IAsPln2DPtr to2D ;
if (to2D.CreateInstance(__uuidof(PAtoMHD::AsPln2D)) != S_OK) {
return FALSE ;
}
CString selFile = LPCTSTR(to2D->BrowseFile(_T(“.\\*.mhd”),_T(“mhd を…”))) ;
if (!selFile.IsEmpty()) {
if (to2D->Load(LPCTSTR(selFile))) {
to2D->Save(LPCTSTR(selFile+_T(“.svg”))) ;
}
}
return FALSE ;
}
CreateInstance の時の PAtoMHD::AsPln2D がわからなかった.
PAtoMHD::IAsPln2D としてしまっていた.