ホーム » メモ (ページ 21)
「メモ」カテゴリーアーカイブ
001SH との接続
001SH と PC を接続しようとして,USB ケーブル(IUD-O012K)を購入.
シャープの「ソフトバンクダウンロード一覧」のページから,「ソフトバンクユーティリティーソフトを利用する」を選択.
そこから飛んで,ソフトバンクユーティリティーソフトのダウンロードページへ.
ダウンロードして,普通にセットアップ.
PC と 001SH をケーブルで接続.
001SH のドライバが認識されず?デバイスマネージャで見ると,001SH と表示があるが黄色いアイコン.
USB ドライバが必要と言うのはわかるが,方法が不明.
検索するとここが見つかり,ユーティリティーソフトウェアに含まれていると読み取れる.
購入した店に行って調べてもらうと,
シャープの「ソフトバンクダウンロード一覧」のページは縦に長く,真ん中より下の位にあるとのこと.
「同意する」として機種選択すると「ダウンロード」のボタンが表示される動作.
このドライバのダウンロードする場所が私には見つけることができませんでした.
ビックカメラの対応してくださった店員さんと,157 の電話の方,ありがとうございました.
iShelExt.dll ダウン
explorer.exe の 0x000000018001907b (iShelExt.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000000000000b0 を読み込み中にアクセス違反が発生しました。
コードを見たが,原因が特定できなかったのでハードコピー.
同様に MShellE.dll でも
explorer.exe の 0x0000000180061830 (MShellE.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0xffffffffffffffff を読み込み中にアクセス違反が発生しました。
これもよくわからない.
2012/08/10 追記
explorer.exe の 0x000000018003938e (MShellE.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0xffffffffffffffff を読み込み中にアクセス違反が発生しました。
2012/08/30 追記
explorer.exe の 0x0000000180018e30 (iShelExt.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000000000000c0 を読み込み中にアクセス違反が発生しました。
2012/09/25 追記
Cache のインデックスが 2 ,Cache はクリアされている.
2012/09/27 追記
2 つのスレッドから Profile::GetInt 内を指した状態で止まっている.
2012/10/08 追記
IL_Env_GetStr など,static で確保しているのが原因か?
2012/10/11 追記
やはり,static Env ?
2012/11/12 追記
DocIB::GetBitmap に以下を追加して排他管理する様に変更してみた.
_MutexS_ mt(FALSE,_T(“DocIB::GetBitmap”)) ;
MutexS m(&mt) ;
また,Mutex の動作が機能する様にするためには,アプリケーションクラスのヘッダで以下が必要.
#include AfxMT.h
Blenderの利用ガイド
Blender 2.6x で,日本語ファイル名などが文字化けしていたので.
Blenderの利用ガイド
2012/07/26 追記
動作の詳細はまだ不明だか,日本語名などを含むファイル名の保存やエクスポートでうまく処理されないことがあるみたい.
例えば,stl をインポートして,それをそのまま dae でエクスポートした時はうまく読めない.
geometry の id などにそれを利用している様,Blender のツリーの表示で Rename すれば OK.
定義済みマクロ
__GNUC__
__APPLE_CC__
Hello, World!
以下のコードで確認.
#include <iostream>
int main(int argc, const char * argv[])
{
#if defined(__GNUC__)
printf(“__GNUC__\n”) ;
#endif
#if defined(__APPLE_CPP__)
printf(“__APPLE_CPP__\n”) ;
#endif
#if defined(__APPLE_CC__)
printf(“__APPLE_CC__\n”) ;
#endif
#if defined(__MACOS_CLASSIC__)
printf(“__MACOS_CLASSIC__\n”) ;
#endif
// insert code here…
std::cout << “Hello, World!\n”;
return 0;
}
???/MacOSX.platform/Developer/SDKs/MaxOSX10.7.sdk/usr/include/TargetConditionals.h より
cpp -dM /dev/null
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() ;
}
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 としてしまっていた.
ipx , PartsA , PartsA_C3D
2012/04/25 以前の PartsA などの ipx の読込みは,CArchive::ReadString を利用していた.
今回,Parts ファミリのファイルアクセスは,LoadText ,SaveText に置き換える.
ReadString を利用していた時の動作
PartsA_C3D::ImportTxt より PartsA::SerializeTxt が呼ばれる.
PACnv3.exe!PartsA::SerializeTxt(CArchive & ar={…}) 行 464
PACnv3.exe!PartsA::Serialize(CArchive & ar={…}) 行 361
PACnv3.exe!PartsA_C3D::ImportTxt(… * pathName) 行 336
PACnv3.exe!PartsA_C3D::Import(… * pathName) 行 137
PACnv3.exe!CPACnv3Doc::OnOpenDocument(… * lpszPathName) 行 177
PartsA_C3D::ImportTxt で,exe と ipx の種類により,ReadString で読める形式でコピーする.
FileMBWC.hxx GetReadTextName により,
UNICODE.exe の場合,UTF-16 のテキストファイルにコピーする.
PartsA::Serialize を呼出す前には,BOM を読み飛ばした位置にポインタがある.
FileMBWC.hxx SerializeTextBOM(ar) により,UNICODE.exe の場合に飛ばす.
* PartsA_C3D を利用してない exe では,形式が異なるファイルは読み出せなかった.
VxxxxV などの exe は,PartsA::Serialize としているのでこれにあたる.
ReadString を利用しない様にしたので,PartsA_C3D::ImportTxt は,シンプルになった.
BOOL PartsA_C3D::ImportTxt (LPCTSTR pathName)
{
if (!PartsA::IsTextFile(pathName)) { return FALSE ; }
CString str ;
if (!::LoadText(pathName,str)) { return FALSE ; }
return PartsA::ImportTxt(str) ;
}
HTML の表示
SVG をダイアログ上に表示したくなったので,CHtmlView などを利用してみた.
Spy++ で見ると,クラス名が “Internet Explorer_Server” となる.
HtmlView.zip
SDI で CHtmlView を利用
1. AppWizard のステップ 6 で,CHtmlView を選択する.
2. ビューのソースの CXxxxView::OnInitialUpdate() を,適当なアドレスに修正する.
Navigate2(_T(“https://mish.myds.me/wordpress/dev/“),NULL,NULL);
ダイアログで,WebBrowser Control を利用
1. プロジェクトにコンポーネントを追加する.
2. 追加したコントロールの変数を割り当てる(ここでは,m_WebBrowse とした).
3. OnInitDialog などで
m_WebBrowse.Navigate(_T(“https://mish.myds.me/wordpress/dev/“),NULL,NULL,NULL,NULL) ;
ダイアログで,CHtmlView を利用
1. CHtmlView* の変数を定義する(ここでは,WebView とした).
2. OnInitDialog で
CRect rect ;
GetClientRect(&rect) ;
rect.top = 25 ;
CRuntimeClass* pClass= RUNTIME_CLASS(CHtmlView) ;
WebView = (CHtmlView*)(pClass->CreateObject()) ;
WebView->Create(NULL,NULL,WS_VISIBLE|WS_CHILD,rect,this,0,NULL) ;
WebView->SendMessage(WM_INITIALUPDATE) ;
WebView->Navigate(_T(“https://mish.myds.me/wordpress/dev/“)) ;
BDoc ファミリ
コンパイルで以下の様なエラーになった場合
c:\…\DocIB.cxx(77) : error C2065: ‘BDocCSV_D’ : 定義されていない識別子です。
c:\…\DocIB.cxx(77) : error C2146: 構文エラー : ‘;’ が、識別子 ‘bdcsv’ の前に必要です。
c:\…\DocIB.cxx(77) : error C2065: ‘bdcsv’ : 定義されていない識別子です。
c:\…\DocIB.cxx(78) : error C2228: ‘.Read’ : 左側がクラス、構造体、共用体ではありません。
c:\…\DocIB.cxx(79) : error C2228: ‘.BDoc_Draw’ : 左側がクラス、構造体、共用体ではありません。
c:\…\DocIB.cxx(79) : error C2653: ‘BDoc_Draw’ : 識別子がクラス名でも名前空間名でもありません。
DocIB.cxx のインクルードする場所をもう少し前にすることによりエラーはなくなるが,…
実行時,いろいろな所でダウンする(表面化しないこともあり).
BDoc_Draw と BDocCSV_D の定義の不整合が原因.
BDoc ファミリや,AccessItemND を見直さなければならないがちょっと時間が取れない.
ひとまず,App.h に BDoc_D.hxx をインクルードすることにより対応する.
#include “MetaFile.hxx”
#include “MemoryDC.hxx”
#include “BDoc_D_.hxx”
CFont::CreatePointFont でアサート
—————————
Microsoft Visual C++ Debug Library
—————————
Debug Assertion Failed!
Program: C:\WINDOWS\explorer.exe
File: wingdix.cpp
Line: 269
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
—————————
中止(A) 再試行(R) 無視(I)
—————————
ここ 1 年位のコードで何個かあったので,…
呼び元で与えられた pDC が CMetaFileDC の場合,m_hAttribDC が NULL となるため.
コードを書いた段階では画面やプリンタだったが,今回 Text → EMF で表面化した.
修正は以下の様な感じ.
// font.CreatePointFont(120,faceName,pDC) ;
if (pDC->m_hAttribDC == NULL) { font.CreatePointFont(120,faceName,NULL) ; }
else { font.CreatePointFont(120,faceName,pDC) ; }
XML の読込テスト – 4
全ては表現できてないが,msxml.dll により読込んだデータの関連はこんな感じか?
IXMLDOMDocument | ||||||
documentElement | ——– | IXMLDOMElement | ||||
attributes | ——– | IXMLDOMNamedNodeMap | ||||
length | ||||||
item 0 | ——– | IXMLDOMAttribute | ||||
: | ||||||
item n-1 | name | |||||
value | ||||||
childNodes | ——– | IXMLDOMNodeList | ||||
length | ||||||
item 0 | ——– | IXMLDOMElement | ||||
: | ||||||
: | ||||||
item n-1 | ——– | IXMLDOMNode | ||||
text | ||||||
nodeName | ||||||
tagName | ||||||
XML の読込テスト – 3
BOOL ReadElement( MSXML::IXMLDOMElementPtr pElement, long indent ) { CString tab = _T("\t\t\t\t\t\t\t\t\t\t\t\t\t") ; CString lsp = tab.Left(indent) ; if (pElement == NULL) { return FALSE ; } MSXML::IXMLDOMNodeListPtr pNode = pElement->GetchildNodes() ; { CString node = LPCTSTR(pElement->GetnodeName()) ; CString tagN = LPCTSTR(pElement->GettagName()) ; CString text ; // if (pNode->Getlength() == 0) { text = LPCTSTR(pElement->Gettext()) ; // } MSXML::IXMLDOMNamedNodeMapPtr aMap = pElement->Getattributes() ; CString str ; if (aMap != NULL) { str = ::ToString(aMap->Getlength()) ; for (int aIndex=0 ; aIndex<aMap->Getlength() ; aIndex++) { MSXML::IXMLDOMAttributePtr attr = aMap->Getitem(aIndex) ; if (attr == NULL) { continue ; } str += CString(_T("\t")) + LPCTSTR(attr->Getname()) ; str += CString(_T(" ")) + ::ToStringTC(LPCWSTR(attr->Getvalue().bstrVal)) ; } } cout << LPCTSTR(lsp) << LPCTSTR(node) << _T("\t") << LPCTSTR(text) << _T("\t") << LPCTSTR(str) << endl ; for (int index=0 ; index<pNode->Getlength() ; index++) { MSXML::IXMLDOMElementPtr child = pNode->Getitem(index) ; ReadElement(child,indent+1) ; } } return TRUE ; }
attr->value が,VARIANT で,VT_BSTR
これを LPCTSTR とすることは出来ず,::ToStringTC をしている.
::ToStringTC は引数とコンパイルオプションにより char* ⇔ wchar* が可能
今回の場合,内部では ::WideCharToMultiByte で変換している.
要素の内容の取得はこんな感じか?
// text = LPCTSTR(pElement->Gettext()) ; if (pNode->Getlength() > 0) { MSXML::IXMLDOMNodePtr pText = pNode->Getitem(0) ; if (pText != NULL) { text = LPCTSTR(pText->text) ; } }
XML の読込テスト – 2
要素へのアクセスはこんな感じと思われるが,Gettext の使い方がよくわからない.
BOOL ReadElement(MSXML::IXMLDOMElementPtr pElement,long indent)
{
CString tab = _T(“\t\t\t\t\t\t\t\t\t\t\t\t\t”) ;
CString lsp = tab.Left(indent) ;
if (pElement == NULL) { return FALSE ; }
MSXML::IXMLDOMNodeListPtr pNode = pElement->GetchildNodes() ;
{
CString node = LPCTSTR(pElement->GetnodeName()) ;
CString tagN = LPCTSTR(pElement->GettagName()) ;
CString text ;
// if (pNode->Getlength() == 0) {
text = LPCTSTR(pElement->Gettext()) ;
// }
cout << LPCTSTR(lsp) << LPCTSTR(node) << _T(“\t”) << LPCTSTR(text) << endl ;
for (int index=0 ; index<pNode->Getlength() ; index++) {
MSXML::IXMLDOMElementPtr child = pNode->Getitem(index) ;
ReadElement(child,indent+1) ;
}
}
return TRUE ;
}
BOOL TestXML (void)
{
…
if (pDoc->load(LPCTSTR(loadFile)) == VARIANT_TRUE) {
{
MSXML::IXMLDOMElementPtr root = pDoc->documentElement ;
ReadElement(root,0) ;
}
}
…
}
XML の読込テスト
// L_xml_2.cpp : コンソール アプリケーション用のエントリ ポイントの定義
//
#include “StdAfx.h”
#include “L_xml_2.h”
#import <msxml.dll> named_guids
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL TestXML (void)
{
HRESULT hr = ::CoInitialize(NULL) ;
if (FAILED(hr)) { return FALSE ; }
{
MSXML::IXMLDOMDocumentPtr pDoc = NULL ;
hr = pDoc.CreateInstance(MSXML::CLSID_DOMDocument) ;
if (FAILED(hr)) { return FALSE ; }
CString loadFile = _T(“test.xml”) ;
{
if (pDoc->load(LPCTSTR(loadFile)) == VARIANT_TRUE) {
printf(“%s\r\n”,(LPCSTR)pDoc->xml) ;
{
MSXML::IXMLDOMElementPtr root = pDoc->documentElement ;
CString tagN = LPCTSTR(root->tagName) ;
CString text = LPCTSTR(root->text) ;
printf(“<%s>%s\r\n”,tagN,text) ;
MSXML::IXMLDOMNodeListPtr nodeL = root->childNodes ;
for (int index=0 ; index<nodeL->Getlength() ; index++) {
MSXML::IXMLDOMElementPtr child = nodeL->Getitem(index) ;
CString tagN = LPCTSTR(child->tagName) ;
CString text = LPCTSTR(child->text) ;
printf(“<%s>%s\r\n”,tagN,text) ;
}
}
}
else {
printf(_T(“error … %s\r\n%s\r\n”),loadFile,(LPCSTR)pDoc->parseError->Getreason()) ;
}
}
}
::CoUninitialize() ;
return TRUE ;
}
/////////////////////////////////////////////////////////////////////////////
// 唯一のアプリケーション オブジェクト
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// MFC の初期化および初期化失敗時のエラーの出力
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 必要に応じてエラー コードを変更してください。
cerr << _T(“Fatal Error: MFC initialization failed”) << endl;
nRetCode = 1;
}
else
{
/*
// TODO: この位置にアプリケーションの動作を記述してください。
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
*/
TestXML() ;
}
return nRetCode;
}
勘違いをしていたので, ±×÷
UNICODE で,±×÷ はそれぞれ,U+00B1 , U+00D7 , U+00F7 になる.
以下は,よく参考にさせてもらっている所
文字コード(日本語漢字コード表)
文字列の縦方向の配置
svg:text の配置で,横方向の指定(text-anchor=”middle”)はあるが,縦方向はなさそうだったので…
if (fabs(incX) > 1e-7 || fabs(incY) > 1e-7) {
CString moveStr = _T(“translate(“)+ToString(pnt.x)+_T(“,”)+ToString(pnt.y)+_T(“)\t”) ;
CString rot_Str ;
CString skewStr ;
if (fabs(incX) > 1e-7) {
rot_Str = _T(“rotate(“)+ToString(0-incX)+_T(“,0,0)\t”) ;
}
if (fabs(incY) > 1e-7) {
skewStr = _T(“skewX(“) + ToString(0+incY) + _T(“)\t”) ;
}
CString vAlign ;
{
P2 move = P2(0,0+txH.GetHeight()/3) ;
vAlign = _T(“translate(“) + ToString(move.x) + _T(“,“) + ToString(move.y) + _T(“)\t”) ;
}
th.AddAttribute (_T(“transform”), moveStr + rot_Str + skewStr + vAlign ) ;
}
else {
th.AddAttribute (_T(“x”), ::ToString(pnt.x)) ;
th.AddAttribute (_T(“y”), ::ToString(pnt.y+txH.GetHeight()/3)) ;
}