• ベストアンサー

dll 内のフォームに値を表示

VB6 で初めてDLLの作成を行っているのですがイメージ通りの動作がしません。 VBD.dll内に フォーム fm1, 標準モジュール Hm1, クラスモジュール CM1を作成しクラスモジュール CM1内にFunction Fcm1 (x1 as string,x2 as integer) を作り Fcm1 で受取るパラメータ x1を フォーム fm1 にある 文字.caption に表示したいのですが上手く行きません。 考えて方が根本的に間違っているのかも知れませんが手順を教えて頂けれ無いでしょうか、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

DLLを参照設定するのではなく DLLのプロジェクトを参照するようにしてみてはいかがでしょう DLLのテストプロジェクトにDLLプロジェクト追加します 参照設定のリストにDLLプロジェクトが表示されると思います これにチェックをつけて OK チェックを入れた際にダイアログの下部に表示されるパス名が hogehoge.vbpになっていることも確認します DLLの中のFcm1を呼び出す部分にブレークポイントを置いて ステップ実行を行い 自分の意図するような動作をしているのか確認しましょう

ShiroNeko
質問者

お礼

redfox63 さん 適切なアドバイスありがとうございます。 早速、試してみます。

関連するQ&A

  • フォームを作成すると同時にイベントを作成する方法は

    フォームを作成すると同時にイベントを作成する方法は? アクセスなのですが 標準モジュールで Sub フォームを作成() Dim myForm As Form Set myForm = CreateForm DoCmd.Close acForm, myForm.Name, acSaveYes End Sub をしたと同時に、 そのフォーム内に Private Sub Form_Open(Cancel As Integer) MsgBox "開きました" End Sub のようなイベントを同時に生成するにはどうすればいいでしょうか? クラスモジュールを使うのですか? クラスモジュールの使い方がまったくわからないのですが サンプルコードを頂けないですか?

  • VBA 標準モジュールとフォーム

    ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?

  • フォームオブジェクトのコントロール

    あるプログラムを解析していたところ、引数に応じて違うフォームのラベルに文字列を代入し・表示するというVB6で書かれた下のコードがありました。 これをVB2008で置き換えてみようと思ったのですが、 ***クラス 'System.Windows.Forms.Form' には既定のプロパティがないため、インデックス処理を実行できません。*** というエラーが帰ってきてしまいます。どのように書き換えればよろしいのでしょうか?? [VB6] Public Sub MsgBoxE(BType As Integer, MsgH As String, MsgM As String, MsgL As String) Dim DForm As Form Set DForm = Nothing 'ダイアログ選択 Select Case BType Case 0 Set DForm = DialogC Case 1 Set DForm = DialogB Case 2 Set DForm = DialogC End Select On Error Resume Next 'メッセージセット DForm!Label1.Caption = MsgH DForm!Label2.Caption = MsgM DForm!Label3.Caption = MsgL DForm.Show

  • VB .NetのDLL参照について

    名前付パイプの処理をしているのですが、DLLが参照できません。 Public Class ClsJi01   Public Declare Function MakePipe Lib "\DLL\Point.DLL" (ByVal pipe_name As String, ByVal buf_size As Integer, ByVal max_instances As Short, ByVal hpipe As Integer, ByVal err_code As Integer) As Integer  Public Sub M_Pipe()   Dim r As Integer   Dim rpipe As Integer   Dim err_code As Integer   r = MakePipe("\\.\pipe\RS04", 255, 16, rpipe, err_code)  End Sub End Class Point.DLLは以前VB6.0の時に使用していたDLLで自作です。 これで実行すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出ます。 どうしたら良いのでしょうか?

  • DLLの利用について

    現在、VCで作成したDLLをVB使うということを行っています。 概要は、VBの方で定義した配列に1~9の数字を代入し、その和を求めるというものです。 DLLに値を渡す際は参照による引渡しをし、DLLで変数の変更を行いたいんです。 しかしその変数の変更がうまくいかないんです。 どこがまずいのでしょうか? プログラム内容は以下に示します。 よろしくお願いします。 *****VBのプログラム***** Option Explicit Private Declare Sub Sum Lib "test.dll" (aa as Integer, bb as Integer) Private Sub Command1_Click() Dim a(9) As Integer  '1~9の値の代入先 Dim b As integer   '和 Dim I As Integer For I = 0 To 9 a(I) = I + 1 Next I b = 0 Sum a, b  'DLLでの計算 MsgBox (b) '結果表示 End Sub *****DLLの中身***** _declspec(dllexport) void _stdcall Sum(short *aa, short bb) { int i; for ( i=0; i<=9; i++){ bb=bb+aa[i]; } } *****モジュール定義内容***** EXPORTS Sum

  • DLL VBとC++

    VBAからVC++2005のDLLを呼び出すプログラムを書いています。 VB側で作成したcpp_proc関数を呼ぶとVBアプリ自体が落ちました。 DLLのreturnの直前に以下のMessageBoxで表示させるとそこまでは表示され、 リターンを押すと、落ちました。 VB側の引数の値 String * 8192が悪いのでしょうか? return直前まで動作していたので、DLLの戻り値に何か原因があるのでしょうか? ついでの質問ですが、DEFの @1は無くても動くのでしょうか? 意味が知りたいです。 // ----- C++ (DLL側) ----- int __stdcall cpp_proc(LPCSTR inp, LPSTR out) { ... 省略 MessageBox(0, "ここまで通過", "debug", MB_OK); return 0; } // ----- DEF ----- LIBRARY "example" DESCRIPTION 'テスト' EXPORTS ; 明示的なエクスポートはここへ記述できます cpp_proc @1 '----- VB側 ----- Public Declare Function cpp_proc Lib "example.dll" _ (ByVal inp As String, ByRef out As String) As Integer Public Sub Test() Dim ret As Integer Dim inp As String Dim out As String * 8192 ret = cpp_proc(inp, out) MsgBox("ret=[" & Cstr(ret) & "]"); End Sub

  • フォームを開いてからの時間を取得

    ウィンドウズを起動してからの経過時間取得のプログラムは下記ようになったのですが・・・VBでつくったフォームを開いたと同時にカウントされるようにコーディングしたいのですがどうしたらよいのでしょうか? 例) Aという名前のフォームを開くと「OO時間OO分OO秒経過」という風にそのフォームのステーラスバーに出そうとしています。 Private Declare Function GetTickCount Lib "kernel32.dll" () As Long Private Sub Timer1_Timer() Dim RetCount As Long Dim h As Integer, m As Integer, s As Integer, ms As Integer RetCount = GetTickCount 'ミリ秒単位で返ってきます ' h = RetCount \ 1000 \ 60 \ 60 m = RetCount \ 1000 \ 60 - h * 60 s = RetCount \ 1000 - (h * 60 * 60 + m * 60) ms = RetCount Mod 1000 Label1.Caption = "経過時間 " & Right(("0" & h), 2) & ":" _ & Right(("0" & m), 2) & ":" & Right(("0" & s), 2) & "." _ & Right(("00" & ms), 3) End Sub

  • フォームの呼び出しについて

    VB.NETで メインのEXEとサブのDLLに分けて作っています。 EXEからDLL内のフォームを表示させようとする場合ですが、 VB.NETではどのように呼ぶべきなのでしょうか? VB6の頃は、EXEからDLL(ActiveX DLL? )のフォームが直接呼べなくて、 EXE側 Dim dll as new DLLClass dll.FormShow() DLLのクラス(DLLClass) Sub FormShow() DllForm.Show みたいに、DLL内のクラスのメソッドをコールし、 その中で、フォームを表示するという手順で呼び出してました。 VB.NETではFormもクラスなので、EXEからDLL(クラスライブラリDLL)内のフォームを 直接呼んでもいいように思うのですが(実際直接呼べる)、 カプセル化というのを考えたときに、フォームを直接呼ぶのではなく、 コントロールするクラスを経由して(VB6のときの方式)呼び出すべきなんじゃないかなと思うのです。 どちらがよいのでしょうか?

  • psapi.dllのGetModuleBaseNameについて

    OS:Windows Server 2003 開発言語:visual basic 2005 vb6で作られたアプリを.net2005に移行しています。 その中で、下記のコードの「GetModuleBaseName」が呼び出される箇所がエラーになり、移行することができません。 ----------------------------------- 【コード】 If EnumProcessModules(hProcess, hModules(0), UBound(hModules), lNeeded) <> 0 Then    'モジュール数を取得する    lModules = lNeeded / 4    'モジュールベース名を取得する    lRetValue = GetModuleBaseName(hProcess, hModules(0), tModuleBaseName(0), UBound(tModuleBaseName))    ~~~    ~~~ end if ----------------------------------- 【エラー内容】 AcccessViolationExceptionはハンドルされませんでした。 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。 他のメモリが壊れていることが考えられます。 ----------------------------------- 「GetModuleBaseName」自体は下記のとおり定義しています。 ----------------------------------- Declare Function GetModuleBaseName Lib "Psapi.dll" Alias "GetModuleBaseNameA" (ByVal hProcess As Integer, ByVal hModule As Integer, ByRef lpBaseName As String, ByRef nSize As Integer) As Integer ----------------------------------- 移行前のvb6のアプリでこの箇所がエラーなく通ることを確認しました。 Psapi.dllの使用方法がWindowsServer2003になって変更になったのでしょうか? 使用方法が変更になったのか調べたのですが、WinAPIの知識不足で・・・。 お力をお貸しください。 よろしくお願いいたします。

  • vc++ dll excel vba

    c++で作成したdllをexcel(vba)で使用する時エラー発生 >>>vs2005 vc++で作成したプロジェクト(プロジェクトはWindowフォームアプリケーションでフォームを使ってあるdllファイルからデータを読み出しポップアップ形でデータを表示する)をdllにした後、作られたdllをexcelに連結し読み出しボタンを押すとdllが実行されるようになっています。 問題はvisual studioがインストールされているパソコンではうまくいくのですが、vsがインストールされてないパソコンで実行すると "実行エラー'53':" "ファイルが見つかりません:xxxxx.dll" が表示され終了されてしまいます。 >>excelのvbaは "Private Declare Function test_func Lib "xyxyxy.dll" Alias "#1" (ByVal test As Integer) As Integer" >>c++のdll作成のほうは "[STAThreadAttribute] __declspec(dllexport) char __stdcall test_f(int dialog_no)" になってます。 ちなみにお客さんのパソコンを使ってテストしているためpath登録や参照登録などができません。 何でも良いのでコメント書いていただければと思います。 大雑把な質問で申し訳ないですが、宜しくお願いいたします。

専門家に質問してみよう