以下vbのコードです。実行時エラーとなります。なぜでしょうか?エラーはstringからintergerへ変換できないです。


Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
(ByVal Destination As Integer, ByVal Source As Integer, ByVal Length As Integer)
  Dim shmem As String
Dim i As Integer
Dim textA As String

textA = TextBox1.Text

For i = 1 To 100
CopyMemory(textA, shmem, Len(shmem))

回答の条件
  • 1人2回まで
  • 登録:2009/10/06 02:05:45
  • 終了:2009/10/07 22:41:05

ベストアンサー

id:JULY No.2

JULY回答回数966ベストアンサー獲得回数2472009/10/06 10:11:40

ポイント35pt

綣���� - Wikipedia

上記ページの「値渡しによる変数の変更」というところに書いてありますが、「ポインタを渡す」というのは引数の参照渡しを実現するための、トリックみたいなものです。C 言語の様に、引数の渡し方として、値渡ししか出来ない言語でも、ポインタ値を渡すと参照渡しみたいなことが出来る、ということになります。

逆に C 側でポインタを期待する引数を VB 側からセットするには、その引数が参照渡しだとして宣言しておけば、VB 側が引数にポインタに該当する値をセットして、関数を呼び出すことになります。

...と書いている最中に、ぴったりのページを見つけました。

http://www.geocities.co.jp/SiliconValley-Bay/9960/vb/pointer.htm...

一応、VarPtr でポインタを求めることが出来ます。で、私が書いた参照渡しとして関数を宣言する場合と、VarPtr を使うことを前提として関数を宣言する場合の、両方が書かれています。

その他の回答(1件)

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472009/10/06 09:30:30

ポイント35pt

VBでAPIを使おう第2回

API の CopyMemory の第一引数は参照渡しなので、ByVal を外すか、ByRef にする、ということじゃないかな?

id:mai_mai_mail

String型のポインタはどのように表現するのでしょうか?単に Dim x as stringでxを利用するとstingをintegerに変換できないと実行時にエラーとなります。

2009/10/06 09:50:09
id:JULY No.2

JULY回答回数966ベストアンサー獲得回数2472009/10/06 10:11:40ここでベストアンサー

ポイント35pt

綣���� - Wikipedia

上記ページの「値渡しによる変数の変更」というところに書いてありますが、「ポインタを渡す」というのは引数の参照渡しを実現するための、トリックみたいなものです。C 言語の様に、引数の渡し方として、値渡ししか出来ない言語でも、ポインタ値を渡すと参照渡しみたいなことが出来る、ということになります。

逆に C 側でポインタを期待する引数を VB 側からセットするには、その引数が参照渡しだとして宣言しておけば、VB 側が引数にポインタに該当する値をセットして、関数を呼び出すことになります。

...と書いている最中に、ぴったりのページを見つけました。

http://www.geocities.co.jp/SiliconValley-Bay/9960/vb/pointer.htm...

一応、VarPtr でポインタを求めることが出来ます。で、私が書いた参照渡しとして関数を宣言する場合と、VarPtr を使うことを前提として関数を宣言する場合の、両方が書かれています。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません