Re: 共通言語ランタイムサポートについて ( No.1 ) |
- 名前:Will 日時:2007/11/21 10:29
共通言語ランタイム使用時は静的リンクライブラリは使用できないとMSから公式アナウンスがあります。
/MDまたは/MDtを使用すればよいようです。
参照
ttp://msdn2.microsoft.com/ja-jp/library/abx4dbyh(VS.80).aspx
|
Re: 共通言語ランタイムサポートについて ( No.2 ) |
- 名前:EMIYA 日時:2007/11/21 18:54
レスありがとうございます。
さっそくMDd?で試したのですが、
1>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll : fatal error LNK1302: リンクに安全な .netmodules のみサポートします。pure .netmodule にリンクできません。
とでてきました。
なので、オプションをclrからclr:safe(安全なMSIL共通言語ランタイムサポート)にしてみたのですが・・・
今度は、エラーが1万7千を越えてもなお出続けるようなぐらい大量のエラーが・・・orz
大概上の辺りはこんなエラーがでました。
error C4956: 'va_list *' : この型は確認可能ではありません
1>c:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h(1709) : error C4959: アンマネージ struct 'localeinfo_struct' は、そのメンバへのアクセスによって確認不可能なコードを生成するため、/clr:safe で定義できません
念のために、clr:pure(純粋MSIL共通言語ランタイムサポート)のほうも試したんですが、
1>..\..\..\Aseria\main.cpp(32) : error C2373: 'WinMain' : 再定義されています。異なる型修飾子です。
1> c:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winbase.h(1875) : 'WinMain' の宣言を確認してください。
というエラーがでました。
最後に、clr:oldSyntax(共通言語ランタイムサポート、古い構文)もためしましたが、clrと同じ結果になりました。
やはり、DXライブラリと一緒に使うことはできないんでしょうか?
無理だとしても、なるべく高速に処理できる文字列クラスを教えていただけるとありがたいです。
用途は、ファイルから読み込んだ文字列を1行ずつ格納して、
それをさらに一行のなかで、区切り文字でトークンにわけてそれを配列の要素のようにアクセスしたいのです。
最後のは質問がかわっちゃってますが、できればよろしくお願いします。
|
Re: 共通言語ランタイムサポートについて ( No.3 ) |
- 名前:aujourd'hui 日時:2007/11/21 21:14
こんにちは。
作成したプロジェクトは、C++/CLIですか。それとも、ネイティブC++ですか。
|
Re: 共通言語ランタイムサポートについて ( No.4 ) |
- 名前:EMIYA 日時:2007/11/22 01:59
こんにちはaujourdさん。
質問に関しては、私の力量不足でナニをいってるのやら・・・orz
プロジェクトはVS2005でVC++のWin32でWin32プロジェクトを選んで、
Windowsアプリケーションと空のプロジェクトにチェックしてあとは触らずで作ってます。
|
Re: 共通言語ランタイムサポートについて ( No.5 ) |
- 名前:aujourd'hui 日時:2007/11/22 09:32
VS2005から/clrと/MT,MTdは併用できなくなったようです。VS2005の/clrは一から作り直したものだとか。
Win32プロジェクトで作成したアプリはネイティブコードとも呼ばれます。つまり、普通のC/C++です。
C++CLIで作成したアプリというのは、普通のC++を.Net対応にしたものです。VS2003までは、Managed C++といっていました。こちらは、/clrと/MTや/MTdはあわせて設定しても問題は無かったようです(ないので、確認は出来ませんが)
前者(C/C++)は、共通言語ランタイムは使用しません。(使用するSDKはPratteForm SDK)
後者(C++/CLI)は、必ず共通言語ランタイムを使わなければなりません。(使用するSDKはFreamWork SDK)
ですので、StirngBuilderクラスはC++/CLIであれば、利用できます。こちらの方はWin32でのコードも混ぜて利用できるようです。
|
Re: 共通言語ランタイムサポートについて ( No.6 ) |
- 名前:EMIYA 日時:2007/11/22 19:18
丁寧な説明ありがとうございます。
Win32ではなく空のCLRプロジェクトというので作ってみたところ、StringBuilderに関してはエラーがでなかったんですが・・・
1>libpng.lib(pngerror.obj) : error LNK2001: 外部シンボル "__iob" は未解決です。
1>libpng.lib(pngrutil.obj) : error LNK2001: 外部シンボル "__iob" は未解決です。
1>libjpeg.lib(jerror.obj) : error LNK2001: 外部シンボル "__iob" は未解決です。
1>C:\Documents and Settings\\デスクトップ\Test\Release\Test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と、/MT及び/MTdにしたなかったせいで、
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=180
のような症状が・・・orz
この問題は、スルーできるでしょうか?
あとは、STLも使ってるのですが、
// VisualC++の標準メモリデバッグ機能又はSTLを使用する場合はコメントを外し、
// プロジェクトの設定でリンクするライブラリを『マルチスレッド デバッグ(/MTd)』
// に変更してください
#define DX_USE_VISUALC_MEM_DEBUG
ここはまだ問題がでてませんが、MTdにしないと予期しないエラーが発生するのでしょうか・・・
|
Re: 共通言語ランタイムサポートについて ( No.7 ) |
- 名前:管理人 日時:2007/11/23 22:09
私の環境で色々試したところ、「空のCLR」から作成したプロジェクトで
コンパイルすることが出来ましたが、この場合DXライブラリで使用している
libjpeg.lib や libpng.lib 等を全て使用するランタイムを「マルチスレッドDLL」
に変更した上でコンパイルし直さなければならず、更にそうして作成したアプリは
VisualC++ の DLL と .NetFramework がインストールされていないと起動できなく
なってしまうので、なんとなく StringBuilder を利用する為だけにそれだけの
デメリットを被るのはなんとなく勿体無いような気がします。
目的は文字列を配列の様にアクセスすること、とのことですが、その機能を
ご自分で組まれてみるというのは如何でしょうか・・・
|
Re: 共通言語ランタイムサポートについて ( No.8 ) |
- 名前:EMIYA 日時:2007/11/24 00:20
レスありがとうございます管理人様。
たしかに、それらのためだけにするには大変ですね・・・orz
一応、途中からもう他ので代用しようと思い、いろいろ探してたら、
basic_symbolというのを発見したのでこれのソースを使わせてもらおうかなと・・・
周りから、速度を過剰に気にしすぎとは言われてるのですが・・・
どうしてもstringが遅いとか、そういう書き込みを見てると我慢ならなくて、
かといって、自分でクラスを作ると確実に使いづらいものになるので・・・orz
なので、とりあえずbasic_symbolとhash_mapの組み合わせで頑張ってみます。
レスしていただいた皆様ありがとうございましたー。
|