C++/CLI

ライブラリの現状

C#で数値計算(その8) - KrdLabの不定期日記で作っていたライブラリを,最近になって書き直しています. ※公開してみました→http://d.hatena.ne.jp/KrdLab/20080101/1199199036そもそも,このライブラリは・・・ 目的: 大学で頑張る研究者の方に,.NET Fra…

難しい

以前作成した,統計解析をサポートするライブラリのコードを整理しています. が,難航しています. 使いやすいライブラリって,どんなだろう???

C++/CLIで作成したDLLが正しくロードされない件について(追加編)

Visual Studio 2005 のプロジェクトを利用すれば,デフォルトでマニフェストが埋め込まれます*1. 後は,ビルドに使用した Visual Studio のバージョンにあった vcredist_x86.exe をインストールすれば動作します.【参考】 Visual Studio でのマニフェスト…

C++/CLIで作成したDLLが正しくロードされない件について(お詫び編)

id:NyaRuRu様より,「VS2005 SP1 では,C++ランタイムライブラリが更新されている」との指摘を受け,もしかして...,と確認してみたら. ビルドマシン:VS2005sp1 実行マシン:VS2005,もしくはVS無し ビルドマシンがVS2005 SP1 であったことを,すっかり…

C++/CLIで作成したDLLが正しくロードされない件について

例えば, Visual C++ > CLR > クラスライブラリ プロジェクトを, CppCLI という名前で作成します. Visual C# > Windows > コンソールアプリケーション プロジェクトを, CSharp という名前で作成します. そして, C++/CLIコード // CppCLI.h #pragma …

C++/CLIクラスのSerialization

C++/CLIでクラス作成したとき,アンマネージポインタをメンバに含む場合があります.このクラスをシリアライズするときは,ISerializableインタフェースを実装し,アンマネージの内容を明示的にシリアル化する必要があります(Serializable属性を付けるだけ…

あれ???

シリアライズされないよ?

シリアライズ化

Matrixクラスをシリアライズ化可能にするため,ISerializableを継承し,GetObjectDataメソッドをオーバライドしました. しかし,コンパイルが通りません. なぜだぁ〜!と悩むこと1時間... 原因が判明しました.なんと...,誤:virtual void GetObjec…

可変個引数

C言語で,可変個の引数をとる関数を定義するときは, void test_varargs( const char* fmt, ... ) { va_list args; va_start(args, fmt); int i = 0; while(fmt[i] != '\0'){ switch(fmt[i]){ case 'd': { int val = va_arg(args, int); printf("%d\n", val)…

妥協...

namespace Hoge { public ref class A {}; public ref class B {}; public ref class R {}; static const R^ Func( A^ a, B^ b ) {...} }; 上記のようなコードからDLLを作成し,C#側から利用したいのですが,クラスA,B,Rは利用できるのに,Func関数は利用…

C#で数値計算

Matrixクラスを作成中.使いやすいインタフェースとはどんなものなのか,悩みまくりです.C++/CLI自体も良く知らないので,コーディングもスムーズにいかない... クラスは簡単にC#側へ公開できるのに,関数はうまく公開できない...,どうやるんだろう?

C++/CLIにおけるオーバーライド

C++/CLIでは,派生クラスでオーバライドする関数を指定できるみたいです. ref class Base { public: virtual void EEE() { Console::WriteLine(L"Base::EEE"); } virtual void FFF() { Console::WriteLine(L"Base::FFF"); } virtual void GGG() { Console::…

interior_ptrとpin_ptr

CLAPACKの関数は,全ての引数をポインタで渡さなければなりません(in/outに関係なく).しかし,VectorやMatrixはref classであるため, ref class Hoge { private: int size; public: void foo() { native_func(&size); // error ! } }; Hoge^ h = gcnew H…

C++/CLIの代入演算子

Vector^ operator+=( const Vector^ v ) { assert(m_size == v->m_size); for(size_type i=0 ; i<m_size ; ++i)m_array[i] += v->m_array[i]; return this; } のように記述したのですが,どうもC#側から利用することができません. 調べてみたところ, static Vector^ operator+( const Vect</m_size>…

始動

以前C++で作成した数値計算用行列クラス(以降C++Matrix)を,何とかしてC#に移植できないかと考えてみました.C#で使用するためには,CLR上で動作するようにしなければなりません.CLRに準拠したコードはマネージコード(managed code)と呼ばれます(CLRに管…