人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下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))

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:as Destination DLL len LIB
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● JULY
●35ポイント

VBでAPIを使おう第2回

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

◎質問者からの返答

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


2 ● JULY
●35ポイント ベストアンサー

綣???? - Wikipedia

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ