- - PR -
VC++.NetでVB.NetのDLLを使用してOracle接続
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-19 10:49
VB.Netで作成したDLLファイルをVC++.Netで使用しており、
DLLファイル内でODPを使用してOracleに接続しています。 初期化関数でDBオープンとそのデータ取得クラスのインスタンス生成をおこない、 別関数でデータを取得したいのですが、それらのオブジェクトをグローバル化しよ うとすると、 「グローバルな、または静的なマネージ型オブジェクト、または __gc ポインタを宣言できません。」 というエラーが発生するため、現在同じ関数内でオープン、データ取得、クローズまで 行っています。そのデータ取得関数の呼び出し頻度が高いため、DBのオープン・クローズ は別処理にしたいんですが、よい方法はないでしょうか。 よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-01-19 11:06
「別処理にする」のは良いんですが、イコール「グローバルにしなければならない」にはならないと思います。 「開きっぱなし」になっているのは、正直怖いです。 そこで使うものは、そこでだけ使える状態にするのは鉄則でしょう。 コネクションを確立したインスタンスを返すメソッドで十分でしょう。 コネクション ブーリングなどを検索してみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-01-19 12:58
こんにちは。
たしかに、そのような制限があるようですね。 マネージ型の制限事項
グローバル化に近いやり方としては… ・VB.NET側でデータ取得クラスに「Singletonパターン」を適用してもらうとか。。。 ・staticなプロパティを持つGC型を作成するとか。。。例えば以下のような感じで↓
まあ、どういう方法が良いか分かりませんが、やり方はいろいろあると思います。 #クラスのメンバー変数なんて、半分グローバル変数のようなものですし…
「コネクション ブーリング」ですか… 「コネクション プーリング」じゃなくて?? | ||||||||||||||||
|
投稿日時: 2006-01-19 14:04
できました!!
マネージ型の制限事項はやっかいですね・・・覚えておきます。 ありがとうございました! | ||||||||||||||||
|
投稿日時: 2006-01-19 14:50
すいません、そうです、Bool してどうする... orz プールするんだろ... orz _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1