初心者の質問で失礼します。
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の場所などに問題はないはずなのですが、もしよろしければ解決方法をお願いします。
DLL呼び出しに、名前空間のエラーが直接関係するとは思えないんですが・・・
いつ、このエラーが発生しますか?
コードを書いた瞬間?
コンパイル(ビルド)した時?
プログラムが開始した時?
何かのコードが実行された時?
また、実行時なら、どこ(なんというコードを実行)で、このエラーが発生します?
コメントありがとうございます。
エラーはコードを書いた瞬間におきました。
あれから分からないまま
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
の部分は参考書通りにコードを記述したのでどこが正しくないのかが分かりません。
あ!「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)
大吉末吉さんのデータ型の問題、メソッドの問題のアドバイス通り修正することで解決できました!
ありがとうございました。
ツイート | ![]() |