marukun77のプロフィール
- ベストアンサー数
- 3
- ベストアンサー率
- 100%
- お礼率
- 0%
- 登録日2008/08/04
- VC++のDLLをVB6.0からVB.NETへ移行する方法
はじめて投稿します。 今、現状VB6.0のプログラムで使用しているVC++のDLLを VB.NETで使用できるように、VB.NETのソースの改修をしています。 (開発環境は、VisualStudio.NET 2003) たいていのDLLは、DllImportを行うことで VB.NETから使用できることを確認しました。 /*--(例)------------------------------------------*/ Imports System.Runtime.InteropServices <DllImport("DLLTest.dll")> _ Private Shared Function DLLTestMethod() As Integer End Function /*------------------------------------------------*/ しかし、苦戦しているDLLファイルがあって、 そのソースを見ると、COMで実装されているようで、 コンパイルしたらタイプライブラリファイルが作成されています。 またDLLのレジストリも登録されているようです。 VB6.0でどう使われているか確認したところ、 そのDLLの参照設定をしていて、 "Public obj As New クラス名"でクラス宣言した後、 obj.関数名()で処理を行っています。 VB.NETでいろいろ試行錯誤してみましたが 参照設定はできるものの、その後で手詰まりになっています。 (参照設定しても、灰色になっているクラス名が存在するので 正しく設定できているかも怪しい状態) (1)----------------------------------------------- 参照設定後、オブジェクトブラウザから見えるクラスをNewして そのメンバ関数を使用する方法 -------------------------------------------------- (結果) レジストリ登録をしていないと 「CLSID{・・・}のCOMオブジェクトが有効でない」云々というエラーに。 それを受けて手動で該当するDLLのレジストリ登録を行った後だと 「オブジェクト参照がオブジェクトインスタンスに設定されません」というエラー。 (ということは、クラス生成に失敗している?) (2)----------------------------------------------- 上記のようにDllImportで実装する方法 (ちなみにそのDLLがエクスポートしている関数は DllCanUnloadNow, DllGetClassObject, DllRegisterServer, DllUnregisterServerの4つ) -------------------------------------------------- (結果) DllGetClassObject以外については関数を呼ぶことができている。 DllGetClassObjectは、引数設定に苦戦して今のところうまくいっていない状態。 (3)----------------------------------------------- インスタンス生成ができていないようなので どこかで調べて見つけてきたCoCreateInstance関数を使用する方法 -------------------------------------------------- (結果) これも引数に何を渡してよいかわからず試行錯誤中。 DLLの読み込みの時点でこけているかと予測して そのあたりが解決すればよいのかな・・・といろいろ試していますが WindowsプログラミングやCOMがよくわかっていないので 何が正解で何が間違っているのかさっぱりわからず、 周りに聞いても精通している人がいないためどうしようもなくなっています。 どんな些細な手がかりでもよいので 突破口になりそうなアドバイスがあれば教えてください。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- hvorfor
- 回答数1
- コンボボックスの設定と選択された値の取得方法
現在、データベース「SQL Server 2005」とVB.NETで開発をしています。 コンボボックスの設定と選択された値の取り方について教えて下さい。 やりたいことは、下記の2点です。 (1)コンボボックスに「T部門テーブル」の部門コード、部門名をセットし、部門名のみを表示する。 (2)コンボボックスが選択された時の、部門コードと部門名の取得の仕方。 コンボボックスの設定は下記のように記述しました。(一応、動作確認をすると、部門名が表示されています。) この記述方法で質問の内容ができますでしょうか? よろしくお願いします。 '// 部門コンボボックスのリスト作成 Public Function fnc部門コンボ設定( _ ByRef nObject As Object, _ Optional ByVal nInsertEmptyItem As Boolean = False _ ) As Boolean Dim strSql As String Dim wCode, wValue As String ' cSqlConnection から SqlCommand のインスタンスを生成する Dim hCommand As System.Data.SqlClient.SqlCommand = cSqlConnection.CreateCommand() Try 'リストの再描画 nObject.BeginUpdate() 'リストをクリア nObject.Items.Clear() 'データ抽出 strSql = "select 部門コード, 部門名 from T部門テーブル order by 部門コード" '実行する SQL コマンドを設定する hCommand.CommandText = strSql '指定した SQL コマンドを実行して SqlDataReader を構築する Dim cReader As System.Data.SqlClient.SqlDataReader = hCommand.ExecuteReader() '次のレコードに進める (次のレコードがない場合は False になるため実行されない) While cReader.Read() '列名を元に値を取得する If IsDBNull(cReader("部門コード")) Then wCode = "" Else wCode = cReader("部門コード") End If If IsDBNull(cReader("部門名")) Then wValue = "" Else wValue = cReader("部門名") End If nObject.Items.Add(New clsItemData(wValue, wCode)) End While 'cReader を閉じる cReader.Close() 'リストの再描画を再開 nObject.EndUpdate() 'コンボボックスに部門名を表示する設定 nObject.DisplayMember = "部門名" '部門名に対応した部門コードを SelectdValue で取得する設定 nObject.ValueMember = "部門コード" Catch ex As Exception Call subError(ex, True, pLogLocal) Exit Function Finally nObject.EndUpdate() End Try 'リソースの解放 hCommand.Dispose() Return True End Function
- ベストアンサー
- Visual Basic
- noname#208236
- 回答数1
- DataGridでエラーになる
こんにちわ。 現在「Microsoft Visual Basic 2008 Express Edition」と「Microsoft SQL Server 2005」で開発を始めた初心者です。 テーブルの指定範囲のレコードをDataGridに表示したいため、ホームページのサンプルを参考にコーディングしたのですが、 エラーとなってしまいます。 フォームには、ツールボックスから「DataGridView」をドラックして貼り付けてあります。 どうすれば動きますでしょうか?ご教授お願いします。 <エラーの内容> 「'TableStyles'は'System.Windows.Forms.DataGridView'のメンバではありません。」 <参考ホームページ> http://park5.wakwak.com/~weblab/selectRange.html ---------------------------------------------------------------- Imports TESTPG.DbUtil Imports System.Data.OleDb Public Class frm社員マスタ一覧 Inherits System.Windows.Forms.Form Private Sub BTN_検索ボタン_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_検索ボタン.Click '------------------------------------------- ' レコードを取得し、データグリッドに表示する '------------------------------------------- Try 'テーブルスタイルを生成する Dim ts As New DataGridTableStyle() 'マップ名を指定する ts.MappingName = "社員テーブル" '新しい列スタイルの作成 Dim cs(2) As DataGridTextBoxColumn cs(2) = New DataGridTextBoxColumn() 'マップ名を指定する cs(2).MappingName = "Column1" '列ヘッダに表示される文字列 '1列目:社員コード cs(0) = New DataGridTextBoxColumn() cs(0).HeaderText = "コード" cs(0).MappingName = "社員コード" cs(0).Width = 40 cs(0).Alignment = HorizontalAlignment.Center '2列目:社員氏名 cs(1) = New DataGridTextBoxColumn() cs(1).HeaderText = "社員氏名" cs(1).MappingName = "社員氏名" cs(1).Width = 90 cs(1).Alignment = HorizontalAlignment.Left '3列目:社員カナ名 cs(2) = New DataGridTextBoxColumn() cs(2).HeaderText = "社員カナ名" cs(2).MappingName = "社員カナ" cs(2).Width = 130 cs(2).Alignment = HorizontalAlignment.Left '列スタイルをテーブルスタイルに追加する ts.GridColumnStyles.AddRange(cs) 'テーブルスタイルをグリッドに追加する dgrSyain.TableStyles.Clear() ← ここでエラー dgrSyain.TableStyles.Add(ts) ← ここでエラー '************************************* 'SQL文の設定 'データを取得する 'データをバインドする '************************************* Catch oExcept As Exception '例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "例外発生") End Try End Sub End Class
- ベストアンサー
- Visual Basic
- noname#208236
- 回答数2