VB2005でDLL関数の宣言をするには

解決


フク  2007-10-03 22:46:12  No: 137686

初心者の質問で失礼します。
VB2005からC++のソースを呼び出す際にDLL関数の宣言したいのですが、ある参考書どうりに
Option Explicit on
Private Declare Function TestSum Lib _
"C:\dllfile\ProCG2\Debug\ProcCG2.dll" _
(ByVal n as Integer, aa As Integer) As Integer

のプログラムを作った際名前空間のステートメントが無効ですとエラーが起きてしまいました。
ProcCG2.dllの場所などに問題はないはずなのですが、もしよろしければ解決方法をお願いします。


大吉末吉  2007-10-03 23:59:32  No: 137687

DLL呼び出しに、名前空間のエラーが直接関係するとは思えないんですが・・・

いつ、このエラーが発生しますか?

コードを書いた瞬間?
コンパイル(ビルド)した時?
プログラムが開始した時?
何かのコードが実行された時?

また、実行時なら、どこ(なんというコードを実行)で、このエラーが発生します?


フク  2007-10-04 02:17:25  No: 137688

コメントありがとうございます。
エラーはコードを書いた瞬間におきました。
あれから分からないまま

Option Explicit On
Public Class Form1
    Private Declare Auto Function TestSum Lib "C:\dll\ProCG2\Debug\ProCG2.dll" (ByVal n As Integer, ByVal aa As Integer) As Integer
End Class

とすることでエラーは消えましたが、これで正しいのかさえ分かりません。

Option Explicit On

Public Class Form1

    Private Declare Auto Function TestSum Lib "C:\dll\ProCG2\Debug\ProCG2.dll" (ByVal n As Integer, ByVal aa As Integer) As Integer

    Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
        Dim n%, sum%
        Dim aa(10) As Integer

        aa(0) = 5 : aa(1) = 8 : aa(2) = 6 : aa(3) = 9
        n = 4
        sum = TestSum(n, aa(0))
        Picture1.Print(n, sum)
    End Sub
End Class

というVBコードで

_declspec(dllexport) short _stdcall TestSum(short n, short *aa)
{
  short i;
  short sum;

  sum = 0;
  for(i=0;i<n;i++)
  {
    sum += aa[i];
  }
  return(sum);
}

のC++ソースを呼び出そうとしましたが、Picture1.Print(n, sum)という行で'Print' は 'System.Windows.Forms.PictureBox' のメンバではありません。のエラーが出されました。
    Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
        Dim n%, sum%
        Dim aa(10) As Integer

        aa(0) = 5 : aa(1) = 8 : aa(2) = 6 : aa(3) = 9
        n = 4
        sum = TestSum(n, aa(0))
        Picture1.Print(n, sum)
    End Sub

の部分は参考書通りにコードを記述したのでどこが正しくないのかが分かりません。


大吉末吉  2007-10-04 03:01:25  No: 137689

あ!「Class定義の外に記述した」と言う事でしたか。
それなら納得。Class定義の中に記述」するのが正解です。

> 参考書通りにコード
何の参考書でしょうか?
VB6とかの参考書を見てませんか?

データ型や、オブジェクのトメソッド等はVB6とVB2005は違いますから、
VB6用のコードをVB2005では使えませんよ。
#「参考」になりません。VB2005用の参考書を使ってください。

データ型の問題:
VB6の「Integer型」はVB2005では「Short型」です。
「Integer」の記述は、全部「Short」にしてください。

メソッドの問題:
VB2005では、描画系のメソッドが違っていて、「Print」はなくなりました。
代わりに「DrawString」を使ってください。

「Visual Basic の概念
グラフィックス (Visual Basic 6.0 ユーザー向け)」
http://msdn2.microsoft.com/ja-jp/library/9dtfzwyx(VS.80).aspx


フク  2007-10-04 03:25:49  No: 137690

大吉末吉さんのデータ型の問題、メソッドの問題のアドバイス通り修正することで解決できました!
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加