Transcript ppt

C++/CLI でつくる
モナカのカワ
episthmh
(゚Д゚)ウマー
MVP for Visual C++
モナカのカワとしてのC++/CLI
既存の資産がMOTTAINAI!
C++/CLIは既存のC/C++を呼べる
C++/CLIライブラリ(DLL)は.NET規約に従う
なので、.NET-lang.はC++/CLIでくるんだ
C/C++ライブラリを呼べる
C/C++
ライブラリ
C++/CLI
ライブラリ
C#
Visual Basic
J#
C++/CLI
C-ライブラリ:SQLiteに.NETのカワ
C# から↓こんな感じで使いたい
/* Database.exec() の結果を受け取るコールバック */
static bool print(object opt, object[] result) {
TextWriter writer = (TextWriter)opt;
foreach ( SQLite3.NVPair field in result) {
writer.WriteLine(“{0} = {1}”,
field.Name, field.Value);
}
public struct NVPair {
return true;
public string Name; // 名前
}
public string Value; // 値
}
static void Main() {
SQLite3.Database db = new SQLite3.Database();
db.open(“wankuma.db”);
string errmsg;
db.exec(“SELECT * FROM a_table”, // 実行するSQL
print, Console.Out, // コールバックと引数
out errmsg);
db.close();
}
C-ライブラリ:SQLiteに.NETのカワ
typedef int (*sqlite3_callback16)
(void*,int,wchar_t**,wchar_t**);
C
int sqlite3_exec16(
sqlite3* db, const wchar_t* sql,
sqlite3_callback16 cb, void* opt, wchar_t **errmsg);
namespace SQLite3 {
public enum Result { … }
public struct NVPair { string Name; string Value; }
public delegate
bool Callback(object opt, NVPair[] results);
public class Database {
public Result exec(string sql,
Callback cb, object opt, out string errmsg);
}
C#
}
カワのかぶせドコロ
文字列 : string ⇔ char*, wchar_t*
コールバック : delegate ⇔ 関数ポインタ
万能変数 : object ⇔ void*
Public delegate bool Callback(Object^ opt…);
public ref class Database {
private:
managedクラスは
sqlite3* db_;
nativeなポインタを
public:
持てる!
Result exec(String^ sql,
Callback^ cb, Object^ opt,
[Runtime::InteropServices::Out]
String^% errmsg)
{ /* カワをかぶせてC-関数を呼ぶ! */ }
C++/CLI
}
詳しくはココ!
翔泳社
Windows Developer Magazine
2006/9月号
episthmh
「世界はオブジェクトの海に浮かぶ」
── 第17回 : SQLiteを使ってDBプログラミング
http://www.shoeisha.com/mag/windev/
Visual C++ ってば…
Cであり、
C++であり、
C++/CLI(.NET)である
int main() {
int value = 123;
printf(“%d\n”, value);
cout << value << end;
Console::WiteLine(“{0}”,value);
}
( ゚д゚)ポカーン
C/C++ライブラリが使え、
Win32-APIが使え、
MFCが使え、
.NET Frameworkが使える
(ノ゚∀゚)ノ アンコイパーイ
おまけ
C
テスト対象
C++/CLI
テストコード
NUnit (C#)
Enjoy OOPing!