ホーム » VC (ページ 9)

VC」カテゴリーアーカイブ

2024年3月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

アーカイブ

ブログ統計情報

  • 77,336 アクセス



コンストラクタで static

次の様なクラスで,VC 14 ではコンストラクタ内の static を呼出した段階で止まってしまう?
VC 12 まででは OK .


  class T_static {
  public:
    T_static () ;
    } ;
  T_static::T_static ()
  {
    {
      static T_static root ;
      }
    std::tout << _T("T_static") << std::endl ;
    }


コンストラクタの初期化動作を次の様に変更.
  T_static::T_static ()
  {
    static bool Initialized = false ;
    if (!Initialized) {
      Initialized = true ;
      static T_static root ;
      }
    std::tout << _T("T_static") << std::endl ;
    }

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC 6 コンソール AP を VC 11 で…

VC 6 コンソール AP を順にアップしたプロジェクトで, VC 11 でビルドすると,
—— すべてのリビルド開始: プロジェクト: T_DbgCls, 構成: Debug Win32 ——
T_DbgCls.cpp
_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57):
  warning C4005: ‘__useHeader’ : マクロが再定義されました。
  c:\program files (x86)\microsoft visual studio 11.0\vc\include\sal.h(2872) :
    ’__useHeader’ の前の定義を確認してください
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77):
  warning C4005: ‘__on_failure’ : マクロが再定義されました。
  c:\program files (x86)\microsoft visual studio 11.0\vc\include\sal.h(2882) :
    ’__on_failure’ の前の定義を確認してください
c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\atlcore.h(638):
  error C2039: ‘SetDefaultDllDirectories’ : ‘`global namespace” のメンバーではありません。
c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\atlcore.h(638):
  error C2065: ‘SetDefaultDllDirectories’ : 定義されていない識別子です。
c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\atlcore.h(640):
  error C2065: ‘LOAD_LIBRARY_SEARCH_SYSTEM32’ : 定義されていない識別子です。
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========


プロジェクト設定の,「プラットフォームツールセット」を「Visual Studio 2012 (v110) 」とすれば通る.


さらに,VC 12 では,
—— ビルド開始: プロジェクト:T_DbgCls, 構成:Debug Win32 ——
T_DbgCls.obj : warning LNK4075: /EDITANDCONTINUE は /OPT:LBR の指定によって無視されます。
LINK : fatal error LNK1104: ファイル ‘mfc120d.lib’ を開くことができません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC 6 Release inline

次の様な呼出しで,Release ビルドでうまく動作しないことがあった.
…\PntFnc\TCrossL\TCrossLD.cpp 2 円の交点のエラー時の動作
  Vd2 cp1 = ::get_point_on_line (l1c,l2c,l1r) ;
デバッグ版では意図した動作となる.
inline Vd2 get_point_on_line ( const Vd2& ls, const Vd2& le, const double d )
{
   if (ls == le) { return ls ; }
   Vd2 unit = (le-ls).Normalized() ;
   Vd2 pos = ls + unit * d ;
   return pos ;
   }
ls と le を比較している部分で抜けてしまっている?
VC 7 では OK.


よくわからないので,間接的に呼出す様に変更.
inline Vd2 get_point_on_line(const Vd2& ls,const Vd2& le,const double d) { return get_point_on_line_(ls,le,d); }

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC2015

MSDN にあった C++ を使った “hello world” アプリの作成 (Windows 10) をやっていて,…


実行すると,
—————————
Microsoft Visual Studio
—————————
Windows ストア アプリ ‘5a7750b3-af94-47d7-a064-b9adc49f8813_7r65t4tynye04!App’ をアクティブにできません。アクティベーション要求がエラー ‘Windows はターゲット アプリケーションと通信できませんでした。これは通常、ターゲット アプリケーションのプロセスが中断されたことを示します。詳細については、[出力] ウィンドウ ([デバッグ]->[ウィンドウ]->[出力]) の [デバッグ] ペインで確認できます’ で失敗しました。
この問題のトラブルシューティングについては、ヘルプを参照してください。
—————————
OK ヘルプ
—————————


リビルドしたら通るようになった?が,今度は
—————————
Microsoft Visual Studio
—————————
Windows ストア アプリ ‘5a7750b3-af94-47d7-a064-b9adc49f8813_7r65t4tynye04!App’ をアクティブにできません。アクティベーション要求がエラー ‘アプリは必要な時刻に開始されませんでした’ で失敗しました。
この問題のトラブルシューティングについては、ヘルプを参照してください。
—————————
OK ヘルプ
—————————


全く実行されてないわけではないので,もっと別の所に原因があるのかもしれない.


VB のプロジェクトを生成して,ビルド,実行すると
—————————
Microsoft Visual Studio
—————————
Windows ストア アプリ ‘b4f551ca-330f-478f-ab2e-c23232b2918c_7r65t4tynye04!App’ をアクティブにできません。アクティベーション要求がエラー ‘アプリは開始されませんでした’ で失敗しました。
この問題のトラブルシューティングについては、ヘルプを参照してください。
—————————
OK ヘルプ
—————————

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC include lib のパス

VC 6
  HKCU\Software\Microsoft\DevStudio\6.0\Build System\Components\Platforms\Win32 (x86)\Directories
VC 7 , 7.1 , 8 , 9
  C:\Users\Iwao\AppData\Local\Microsoft\VisualStudio\…\VCComponents.dat
VC 10 , 11 , 12
  C:\Users\Iwao\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp. … .user.props

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC 10 でビルドした exe を XP で…

以前から VC10 以降でビルドした exe が Win XP 環境で起動できてなかった(ビルド環境の Win 7 では OK).


—————————
M—.exe – エントリ ポイントが見つかりません
—————————
プロシージャ エントリ ポイント K32GetProcessMemoryInfo がダイナミック リンク ライブラリ KERNEL32.dll から見つかりませんでした。
—————————
OK
—————————

日本語化された GetProcessMemoryInfo には書かれてないが,
こちら (GetProcessMemoryInfo function) には,Win 7 以降変わっているような記述がある.


対応としては App.h(アプリケーションクラスのヘッダファイル)に以下を追加した.
  #ifndef PSAPI_VERSION
    #define PSAPI_VERSION 1
    #pragma comment (lib, “PSAPI.Lib”)
  #else
    #pragma message (“defined PSAPI_VERSION *************”)
  #endif

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

fatal error LNK1112

確か前にもどこかに書いているが…


Win 32 プロジェクトを「構成マネージャ」で x64 にコピーしてビルドすると,
 fatal error LNK1112: モジュールのコンピューターの種類 'x64' は対象コンピューターの種類 'X86' と競合しています。
対応方法は
 プロジェクトのプロパティで「リンカ」-「コマンドライン」の「追加のオプション」にある "/MACHINE:I386" を削除

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

IIS での ActiveX.exe

次の様なコードで,環境により?サーバの exe が終了されないことがある.
  dim oHV
  set oHV = Server.CreateObject(“AsHVXxx.Application”)
  Response.Write “AsHV….App ” & oHV.GetVersion & “<br>” & vbCrLf
  set oHV = Nothing
AsHVxx.exe   ~.Application のみ
  Win XP , 7 とも正しく終了する.
PAtoXx.exe
  Win XP 環境で,デバッグ版 exe は OK .
  Win 7 では正しく終了している.


2015/02/19
PAtoXx.exe の OnInitDialog で,環境設定用のダイアログが表示されて止まってしまっていた.
で,単純にメッセージボックスなどを表示しているならばすぐわかったはずだが,…
  普通の exe としての起動の場合は,ダイアログは表示されない.
  ASP のオートメーションとして起動された場合は,見えないがダイアログが表示されて止まっている.
ダイアログが表示される条件は,設定値が正しいフォルダをさしていない場合.
  c:\ProgramData\… の様にローカルをさしている場合は,どちらの起動でもダイアログが表示されないで処理を継続.
  \\T54W7U64\Documents\… の場合,当然であるが単純起動の exe では OK でダイアログは表示されない.
  これが ASP から起動されると _taccess で正しく判断できず,ダイアログが表示されて止まっている.
CFile::GetStatus でもうまく判断できない?


2015/02/24
MFC クラスウィザードからの「クラスの新規作成」で 「CCmdTarget」 「タイプ ID で作成」したものも終了されない?
利用している所は次の様な感じ.
  set oM_P_ = Server.CreateObject(“AsXxxxX.Path”)
デフォルトで作成されている ~.Application を利用することで終了できる.
  set oM_S_ = Server.CreateObject(“AsXxxxx.Application”)
この動作は,vbs でも同様に確認できる.


2015/03/05
AsXxxS.exe を修正していて Win 7 環境で,
  Server オブジェクト エラー ‘ASP 0177 : 80080005’
  Server.CreateObject に失敗しました
  /Test/Test_3rd/D_Path_1.asp, 行 7
  80080005
XP 環境では OK .
設定関連の漏れがあると思うが,それまで通っていたのでコードを変更.
  以下が新しく追加した部分
   {
     #if defined _UNICODE
       folder = ::FolderAddLastSP(folder) + _T(“WC”) ;
     #elif defined _MBCS
       folder = ::FolderAddLastSP(folder) + _T(“MB”) ;
     #endif
   // ::CreateFolder(folder) ;
     if (::FolderIsNothing(folder)) {
       if (::CreateDirectory(folder,NULL)) { folder = folder+_T(“\\”) ; }
       }
     }
  最初 CreateFolder としていた所を,CreateDirectory に変更することで対応.
この関数は,デバッグ情報をファイルに出力しているが,Win 7 環境ではファイルが生成されてない.


%Temp% (c:\Windows\Temp) 以下に AsImgCnv….\EMF などのフォルダを作成して,生成した emf を保持している.
綺麗な状態に戻そうとして,EMF フォルダを削除して実行すると,
   エラー ‘80010105’
  /Test/Test_2nd/CallAS/E/SelectPage.asp, 行 148
AsImgConv… フォルダのアクセス権を変更してしまった事が原因か?
どの様に設定すべきかわからず,AsImgCnv… フォルダをエクスプローラで削除して対応.


もう一回,うまく行っている状態で EMF フォルダを削除.
どうも設定ではなくコードが悪いみたいで,影響していそうな所を見てみると,
  CacheFile::GetFolder で ::CreateFolder を呼んでいる.
::CreateFolder を MFC を使用していない ::Folder_Create に置換えてみた.
  停止(’ASP 0177 : 80080005’)することはなくなったが,まだ何かありそう.
  EMF のフォルダが生成されない.


2015/03/10
結局,%Temp% は利用しない様に変更した.
どういう条件かわからないが,c:\Windows\Temp\DbgDump\ にはデバッグ情報が正しく出力されてなかった.
(Win XP では意図した動作だったと思う)


2015/03/30
%Temp% でなく Public\Documents\ 以下にしたが,それだけでは完全ではなさそう.
アクセス権の関係と思うが,パブリックフォルダの共有設定が必要?

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC 6 UNICODE C2664 , C2679 …

VC 6 コンソール AP で _UNICODE とした時,部分的に効いていない?様なエラー.

--------------------構成: T_RegKey - Win32 Release--------------------
コンパイル中...
T_RegKey.cpp
...\_s_func.hxx(71) : error C2664: 'wcscpy' : 1 番目の引数を 'char *' から 'unsigned short *' に変換できません。
...\_s_func.hxx(72) : error C2664: 'wcslen' : 1 番目の引数を 'const char *' から 'const unsigned short *' に...
...\StringFn.hxx(277) : error C2679: 二項演算子 '=' : 型 'unsigned short [3]' の右オペランドを扱う演算子は定義...
...\StrAryFn.hxx(118) : error C2665: 'wcspbrk' : 2 のオーバーロードは 1 番目の引数を 'char *' から要求の型に変換...
...
T_RegKey.obj - エラー 86、警告 0

先頭で #include <Afx.h> などとすればコンパイルは通る.
または,次の様に UNICODE を定義すれば良いみたい.
  #ifdef _UNICODE
    #ifndef UNICODE
    #define UNICODE
    #endif
  #endif
以前にも同じことを書いていた.


#include <Afx.h> などを追加した場合は,

--------------------構成: T_RegKey - Win32 Release--------------------
リンク中...
uafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
uafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です
c:\...\Release.060/T_RegKey.exe : fatal error LNK1120: 外部参照 2 が未解決です。
link.exe の実行エラー

T_RegKey.exe - エラー 3、警告 0

「プロジェクトの設定」-「一般」の「M..F..C..」で「共有 DLL で MFC を使用」などとする.


UNICODE の定義は,(VS12)\VC\AtlMFC\Include\AfxV_W32.h を参照して i_Define.hxx に追加した.
Windows.h より前に UNICODE が定義されてない場合は,i_Define.hxx をインクルードすれば良い.


2020/09 コンソール AP での define

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

コンテキストメニューが表示されない

あるダイアログベースの exe をテストしていて,右クリックでメニューが表示されない現象となった.
ボタンによる動作のメニューは表示される.
デバッガで追いかけると,次の様なコードの CMenu::LoadMenu が FALSE となっていた.
  void CXxxxDlg::PopupSingleSel(CPoint pt,CWnd *wnd)
  {
     CMenu menu ;
     if (!menu.LoadMenu(IDR_SINGL_SEL)) { return ; }
     CMenu* pPopup = menu.GetSubMenu(0);
     …
     }
ボタンによるメニュー表示は次のコード.
  void CXxxxDlg::OnOther()
  {
     CMenu menu ;
     if (!menu.LoadMenu(IDR_OTHER)) { return ; }
     CMenu* pPopup = menu.GetSubMenu(0);
     …
     }


メニューが表示されない原因はリソース不足.
不要なエクスプローラのウィンドウを閉じて,意図した動作となることを確認.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

double -> long

double の値を long にキャストした時,VC 8 で思った動作ではなかったので調べてみた.
テストに使用したのは次の様な単純なコード.


// T_DtoI.cpp
#include <iostream>
int main(int argc, char* argv[])
{
  double d8 = 1/7. ;
  for (int index=0 ; index<25 ; index++) {
    d8 = (d8 * 7) ;
    __int64 i8 = __int64(d8) ;
    long l4 = long(d8) ;
    printf ((“%15g\t%25I64d\t%20I64x\t%15ld\t%15x\n”),d8,i8,i8,l4,l4) ;
    }
  return 0;
  }


d8 の値を /7 と *7 としているのはあまり意味はない.


C:\Users\Iwao>\\DevXP\C_Drive\Temp\TestCPP\T_DtoI\Release.060\T_DtoI.exe
              1                         1                          1                  1               1
              7                         7                          7                  7               7
             49                        49                         31                 49              31
            343                       343                        157                343             157
           2401                      2401                        961               2401             961
          16807                     16807                       41a7              16807            41a7
         117649                    117649                      1cb91             117649           1cb91
         823543                    823543                      c90f7             823543           c90f7
    5.7648e+006                   5764801                     57f6c1            5764801          57f6c1
   4.03536e+007                  40353607                    267bf47           40353607         267bf47
   2.82475e+008                 282475249                   10d63af1          282475249        10d63af1
   1.97733e+009                1977326743                   75db9c97         1977326743        75db9c97
   1.38413e+010               13841287201                  339014821          956385313        39014821
    9.6889e+010               96889010407                 168f08f8e7        -1895237401        8f08f8e7
   6.78223e+011              678223072849                 9de93ece51         -381759919        e93ece51
   4.74756e+012             4747561509943                45160b7a437         1622647863        60b7a437
   3.32329e+013            33232930569601               1e39a5057d81        -1526366847        a5057d81
   2.32631e+014           232630513987207               d39383266e87        -2094633337        83266e87
   1.62841e+015          1628413597910449              5c908960d05b1        -1777531471        960d05b1
   1.13989e+016         11398895185373144             287f3c1a5b27d8          442181592        1a5b27d8
   7.97923e+016         79792266297612000            11b7aa4b87e16e0        -1199696160        b87e16e0
   5.58546e+017        558545864083283968            7c05a810b72a000          192061440         b72a000
   3.90982e+018       3909821048582987776           3642798750226000         1344430080        50226000
   2.73687e+019      -9223372036854775808           8000000000000000                  0               0
   1.91581e+020      -9223372036854775808           8000000000000000                  0               0
  
C:\Users\Iwao>\\DevXP\C_Drive\Temp\TestCPP\T_DtoI\Release.080\T_DtoI.exe
              1                         1                          1                  1               1
              7                         7                          7                  7               7
             49                        49                         31                 49              31
            343                       343                        157                343             157
           2401                      2401                        961               2401             961
          16807                     16807                       41a7              16807            41a7
         117649                    117649                      1cb91             117649           1cb91
         823543                    823543                      c90f7             823543           c90f7
    5.7648e+006                   5764801                     57f6c1            5764801          57f6c1
   4.03536e+007                  40353607                    267bf47           40353607         267bf47
   2.82475e+008                 282475249                   10d63af1          282475249        10d63af1
   1.97733e+009                1977326743                   75db9c97         1977326743        75db9c97
   1.38413e+010               13841287201                  339014821        -2147483648        80000000
    9.6889e+010               96889010407                 168f08f8e7        -2147483648        80000000
   6.78223e+011              678223072849                 9de93ece51        -2147483648        80000000
   4.74756e+012             4747561509943                45160b7a437        -2147483648        80000000
   3.32329e+013            33232930569601               1e39a5057d81        -2147483648        80000000
   2.32631e+014           232630513987207               d39383266e87        -2147483648        80000000
   1.62841e+015          1628413597910449              5c908960d05b1        -2147483648        80000000
   1.13989e+016         11398895185373144             287f3c1a5b27d8        -2147483648        80000000
   7.97923e+016         79792266297612000            11b7aa4b87e16e0        -2147483648        80000000
   5.58546e+017        558545864083283968            7c05a810b72a000        -2147483648        80000000
   3.90982e+018       3909821048582987776           3642798750226000        -2147483648        80000000
   2.73687e+019      -9223372036854775808           8000000000000000        -2147483648        80000000
   1.91581e+020      -9223372036854775808           8000000000000000        -2147483648        80000000

VC 7 , 7.1 は VC 6 と同等.VC 12 までは VC 8 と同等.
Mac 64 ビットでは,long が 64 ビットのため?そのままだと VC 6 と同等になる.
long を int として 32 ビットとすると VC 8 と同等.


ここまでは,long の範囲を超えたためと理解できるが,unsigned long の場合はまた動作が異なる.
    long l4 = long(d8) ;
    ULONG u4 = ULONG(d8) ;
    printf ((“%15g %25I64d %20I64x %12ld %10x %12ld %10x\n”),d8,i8,i8,l4,l4,u4,u4) ;

今回表面化したバグは,次のコード.
  long now_Tick = long(GetTickCount_s()*1000) ;
得た値を覚えておき,次のタイミングで 1 秒以上の開きがあるかを計測したかった.
最初の頃はわからなかったが,
 先日 25 日(0x7FFFFFFF 2,147,483,647)を過ぎて 0x80000000 となってしまっていた.
MSDN 浮動小数点型からの変換

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

コンボボックスで文字化け

「今まで CHS で使用していた環境を日本語に切替えたのに,一部 “漢字” で表示されたままになっている」と問合せ.
UNICODE.exe なので,MultiByte との変換の時には問題が発生することは知っていたが,…
メニューやダイアログのタイトルなどは問題ないが,コンボボックスで文字化けしていた.
「コントロールパネル」-「地域と言語」-「管理」タブ-「Unicode 対応…」-「システム ロケール…」が「日本語」でなかった.


UNICODE.exe でも,コンボボックスでは文字化けすることは知らなかったので,exe を作って調べてみた.
MBCS.exe .半角カタカナなども文字化けしてしまう.


UNICODE.exe .コードで追加している場合は,正しく表示される.
m_ComboD.AddString(_T(“1234567890”)) ;
m_ComboD.AddString(_T(“12345”)) ;
m_ComboD.AddString(_T(“ABCDEFGHIJ”)) ;
m_ComboD.AddString(_T(“ABCDE”)) ;
m_ComboD.AddString(_T(“あいうえお”)) ;
m_ComboD.AddString(_T(“亜意卯絵尾”)) ;


VC 2013 で同様に作成してみたが,

最初,リソースエディタで複数指定する方法がわからなかったが,セミコロンで区切れば OK .


コンボボックスの表示データを,リソースで指定している場合に文字化けしてしまう.
ComboBox.zip


これらに関して検索してみると,
UNICODEアプリケーションで文字化けが発生する
リソースファイルの文字列のUNICODE化

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

printf(“%c”,’\a’) を cout で

_tprintf(_T(“%c”),_T(‘\a’)) を std::tout に変更しようとして,以下の様にしてみた.
  std::tout << ‘\a’ ;
VC 6 で,MBCS では意図した動作 (BEL) となるが,UNICODE の場合 “7” が表示される.


一度文字列のバッファに入れれば良いと気づき,
  std::tout << tstring(_T(“\a”)) ;

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

無効なパスが含まれています

VC 8 のプロジェクトのリリース版でビルド,実行したら,
—————————
MSW_0924
—————————
無題のファイル には無効なパスが含まれています。
—————————
OK
—————————
AFX_IDP_FILE_BAD_PATH
リビルドで正しく起動する様になった.
原因はよくわからないが,リソース辺りか?

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

OpenGL Programing Guide

何年も前に買った本(1995年8月10日第4刷となってる)で,中に含まれるサンプルを実行できる様にしてみた.
OpenGL Programing Guide
サンプルのソースで,<gl\glut.h> のインクルードは最初に移動.


glut
opengl.org
  GLUT and OpenGL Utility Libraries
    GLUT – The OpenGL Utility Toolkit
      Nate Robin’s GLUT for Windows page
glut32.dll は,system32 などへ.
glut.h は,~\Include\gl へ.
glut32.lib は,~\Lib へ.


セレクション
::glRenderMode(GL_SELECT) の後の ::glRenderMode(GL_RENDER) で,セレクションヒット数が得られる.
::glGetIntegerv(GL_RENDER_MODE) で現在のモードを取得可能.
セレクションバッファの内容
  名前の深さ?
  Z min
  Z max
  名前 …


2014/09/04
時間がかかったがなんとか GLUT ではできた.


2014/09/08
今度は,VXxxxView を使用した SDI.exe での手順.
ビューの OnDropFiles で,ファイルの種類により glRenderMode GL_SELECT , GL_RENDER を呼ぶ様に変更.
  CMainFrame::OnDropFile で条件により CXxxxView::OnDropFile を呼び出し.
  glGetIntegerv(GL_RENDER_MODE,…) で GL_SELECT が返ってこない.
    wglMakeCurrent を呼んでなかったので,効果がなかった.
  今度は,GL_SELECT にならない.GL_INVALID_OPERATION となる.
    ヘルプにある様に,glSelectBuffer を呼んでなかった.
CPickSView::OnDropFiles
  GetOpGLP()->MakeCurrent(TRUE) ;
  if (…) {
    ::glSelectBuffer(BUFSIZE,selBuf) ;
    ::glRenderMode(GL_SELECT) ;
    }
  else {
    ::glRenderMode(GL_RENDER) ;
    }
  GetOpGLP()->MakeCurrent(FALSE) ;


2014/09/10

PickS.2014.09.09.zip
マウスの Y 方向の位置が合ってない.
その exe を Win 7 環境で動かすと,

デバッグ用に ::glGetIntegerv(GL_RENDER_MODE,…) のために GetOpGLP()->MakeCurrent(…) していた.
  MakeCurrent(FALSE) で SwapBuffers を呼んでいる.


マウスの Y 方向は,縦長だと合っていそう.横長だとその長い分だけ Y 方向にずれている?

コの字型の平面方向で,座標はそれなりにとれている.::gluUnProject の z は Depth / 0xffffffff .
gulUnProject の y の与え方が違っていた.
viewPort[3] – pt.y としていたが,それではダメみたいで,GetClientRect の Height() としてうまくいってそう.
PickS.2014.09.10.zip
まだ ::gluPickMatrix の方がうまくできてない.


2014/09/11
平面図にして,1 つの直方体がウィンドウいっぱいに表示される状態で選択すると,

どうもピック領域のサイズが,ウィンドウの大きさになっているような感じ.
20 Picking and Using Selection 20. ピッキングとセレクションの使い方 を参考にしているが,…


::gluPickMatrix を呼ぶタイミングが悪かったのが原因.
ある程度予想はしていたが,OpGL::Projection の中のため,その関数を分割する必要がありそう.
その関数内の OpenGL の呼び出しは,
  ::glMatrixMode(GL_PROJECTION) ;
  ::glLoadIdentity() ;
  //  ここ
  ::glOrtho(r.l,r.r,r.b,r.t, zNear,zFar) ;  /  ::gluPerspective(deg(angle),aspect, zNear,zFar) ;
  ::glViewport((GLint)win.l,(GLint)win.b,(GLint)(win.r-win.l),(GLint)(win.t-win.b)) ;
glLoadIdentity() の後に ::gluPickMatrix を呼ばなければならない.
PickS.2014.09.11.zip


2014/09/18
汎用的なコードにするため,コードを見直しているがなかなか進まない.
例えば,マウスの移動で選択されているものを表示しようとすると,テクスチャありでは遅くて使えない.
また,その時の表示で PgonsA の描画を抜き出したコードだと何とか見れるが PartsA::Draw 相当だと遅い.
PickS.2014.09.18.zip


Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC のビルド時間

  A-T-r A-T-b A-E-r A-E-b B-I-r B-I-b
VC 6 35 6 160 12 380 21
VC 7 52 6 180 15 476 27
VC 7.1 73 11 295 24 745 41
VC 8 80 15 275 24 535 30
VC 9 25 9 100 12 220 15
VC 10 143 24 470 34 542 42
VC 11 150 21 475 31 505 38
VC 12 30 11 100 15 130 20

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

‘THIS_FILE’ がシンタックスエラーを…

今まで通っていたプロジェクトで,
  ComPrj03.cpp
  c:\…\memory(16) : error C2061: 構文エラー : 識別子 ‘THIS_FILE’ がシンタックスエラーを起こしました。
  c:\…\memory(17) : error C2091: 関数は関数を返せません。
  c:\…\memory(17) : error C2809: ‘operator new’ に仮引数リストがありません。
  c:\…\memory(20) : error C2954: テンプレートの定義はネストできません。
  cl.exe の実行エラー
  ComPrj03.obj – エラー 4、警告 0


ソースの先頭付近に #include <memory> を追加.
  #include “StdAfx.h”
  #include “ComPrj00.hpp”
  #include <memory>
 


2019/01/18

--------------------構成: MkZIP2 - Win32 Release--------------------
コンパイル中...
MkZIP2.cpp
リンク中...

MkZIP2.exe - エラー 0、警告 0
--------------------構成: MkZIP2 - Win32 Debug--------------------
コンパイル中...
MkZIP2.cpp
c:\program files\microsoft visual studio\vc98\include\memory(16) : error C2061: 構文エラー : 識別子 'THIS_FILE' がシンタックスエラーを起こしました。
c:\program files\microsoft visual studio\vc98\include\memory(17) : error C2091: 関数は関数を返せません。
c:\program files\microsoft visual studio\vc98\include\memory(17) : error C2809: 'operator new' に仮引数リストがありません。
c:\program files\microsoft visual studio\vc98\include\memory(20) : error C2954: テンプレートの定義はネストできません。
cl.exe の実行エラー

MkZIP2.exe - エラー 4、警告 0

#include “stdafx.h”
#include “MkZIP2.h”
#include <ShlObj.h>
#import <Shell32.dll> // named_guids
//#include <memory>


エラーになるのはデバッグ版のビルド.リリース版では通る.
#include <memory> を有効に.


2023/03/24
error C2061 , C2091 , C2809 , C2556

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Polymorphism

class iDocCSV1 : public iDocText {

virtual long GetFieldNo (c_tstring& fieldName) const { return FNoNOP ; }

} ;
c_tstring fieldName となっていた.


TextureTo_1::MakeCSV1 でタプルクォーテーションでうまく括られない.閉じる ‘\”‘ が付加されない.
   da.push_back(::QuotM_Add_Auto( GetPath () ) ;
原因はよくわかってないが,LPCTSTR 版を利用することで対応.
   da.push_back(::QuotM_Add_Auto( GetPath ().c_str()) ) ;
MakeCSV1 を切り出してコンソール AP としてテストしたが,期待した動作となり原因は掴めてない.


2014/06/25
また次の様なコードで,STL 版ではうまく動作していない.
{
tstring str ;
str += tt1->GetName() + _T(“\r\n”) ;
str += tt1->GetPath() + _T(“\r\n”) ;
str += tt1->GetPathPNG()+ _T(“\r\n”) ;
str += tt1->GetPathTGA()+ _T(“\r\n”) ;
m_TexPath1 = str.c_str() ;
}
MFC 版では OK .
{
CString str ;
str += tt1->GetName ().c_str() + CString(_T(“\r\n”)) ;
str += tt1->GetPath ().c_str() + CString(_T(“\r\n”)) ;
str += tt1->GetPathPNG ().c_str() + CString(_T(“\r\n”)) ;
str += tt1->GetPathTGA ().c_str() + CString(_T(“\r\n”)) ;
m_TexPath1 = str ;
}


2014/06/27
また,::String_Join_Line でうまく結合されなかった.
デバッガで調べると,サイズは確保されいる.メモリの内容をよーく見てみると,途中に ” が入っている.
原因は,MFC を利用しない方法で書き直した ::DropFilesTo のバグ.
ファイル名の最後に余分な ‘\0’ が付加されていた.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC 6 MFC サポートのコンソール AP で,C4786

c:\program files\microsoft visual studio\vc98\include\utility(123) :
warning C4786: ‘std::vector<std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,std::allocator<std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > >’ :
デバッグ情報で識別子が 255 文字に切り捨てられました。
StdAfx.h の #include <iostream> より前に,以下を追加して対応.

    #pragma warning (disable : 4786 )
    #include <utility>
//  #pragma warning (default : 4786 )
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

MFC DLL → Static – 2

VC 6 などで生成したプロジェクトを,VC 7 ~ VC 11 まで順に変換して利用してきたもの.
「共有 DLL で MFC を使う」から「スタティック ライブラリで MFC を使用する」に変更してビルドすると,
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afx.h(24):
  fatal error C1189: #error : Building MFC application with /MD[d]
   (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
プロジェクトの「プロパティページ」-「構成プロパティ」-「C/C++」-「コード生成」-「ランタイム ライブラリ」を
  「マルチスレッド DLL (/MD)」から「マルチスレッド (/MT)」に変更.


ビルドは通る様になったが,起動時メインフレーム表示直後にアプリケーションエラー.
  プロジェクトのプロパティで,「リンカ」-「デバッグ」-「デバッグ情報の生成」で「はい (/DEBUG)」に.
  ビルドして実行すると,
  C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\src\mfc\docsingl.cpp
    CSingleDocTemplate::SetDefaultTitle(CDocument* pDocument) の
       ENSURE(strDocName.LoadString(AFX_IDS_UNTITLED));
アプリケーション エラー
プロジェクトのプロパティ,「リソース」-「プリプロセッサの定義」に “_AFXDLL;” があったので削除.


2021/02/17
VC 7 以降に変換した段階で,ソースの「プリプロセッサの定義」が引き継がれてしまう?
そのため,それは削除した方が良さそう.
VC 8 「ソース」のプリプロセッサの定義
* 間違ってプロジェクトの「プリプロセッサの定義」を削除しないこと.
VC 12 LNK1104 , VC 14.2 LNK2019

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.