トップ回答者
VC++で作成したDLLから戻り値は受け取れるでしょうか?

質問
-
Win10 x64 visual sutudio2010で開発しています。
Visual Basicは初心者です。
VC++で作成したDLLを、VBからCALLできるか試そうとしています。
DLL側の関数UINT WINAPI Manage_Ini(UINT id)
{
return 1;
}------
defファイル
LIBRARY "VCDLL"
EXPORTS
Manage_Ini @1=========
VB側
Public Class Form1
① Private Declare Sub m_ini Lib "vcdll.dll" Alias "Manage_Ini" (ByVal id As Long) As Long
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
m_ini(1)
End Sub
End Class=========
このようにコーディングすると、
① Private Declare Sub m_ini Lib "vcdll.dll" Alias "Manage_Ini" (ByVal id As Long) As Long
①行の最後の、”As Long”で、「ステートメントの終わりを指定してください」と表示されます。
DLLの戻り値の宣言はどうのようにすればよいでしょうか?
戻り値を受け取ることはできないのでしょうか?
全くの初心者で、初歩的な質問で申し訳ありません。
ご指導、よろしくお願いいたします。
kizakura_ui
回答
-
構文エラーについては、Declare Sub を Declare Function に改めれば通るはずです。
しかし C++ の UINT は、.NET の System.UInt32 相当の 4 バイト整数型です。
VB の Long は、8 バイトの System.Int64 のことなので、宣言も間違っています。
4 バイト整数型である UInteger (UInt32) か Integer (Int32) に変更する必要があるでしょう。- 回答としてマーク kizakura_ui 2020年9月30日 0:46
-
VBにおいて戻り値のある関数はFunctionです。
Private Declare Function m_ini Lib "vcdll.dll" Alias "Manage_Ini" (ByVal id As UInt32) As UInt32
また、C++のUINT(符号なし32bit)は、VB.NetではUInteger あるいはUInt32が対応します。
VB.NetでのLongは符号なし64bitLongは符号付き64bitです
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!
- 回答としてマーク kizakura_ui 2020年9月30日 0:46
- 編集済み gekkaMVP 2020年9月30日 3:30 符号有り無し間違い訂正
すべての返信
-
VBにおいて戻り値のある関数はFunctionです。
Private Declare Function m_ini Lib "vcdll.dll" Alias "Manage_Ini" (ByVal id As UInt32) As UInt32
また、C++のUINT(符号なし32bit)は、VB.NetではUInteger あるいはUInt32が対応します。
VB.NetでのLongは符号なし64bitLongは符号付き64bitです
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!
- 回答としてマーク kizakura_ui 2020年9月30日 0:46
- 編集済み gekkaMVP 2020年9月30日 3:30 符号有り無し間違い訂正
-
構文エラーについては、Declare Sub を Declare Function に改めれば通るはずです。
しかし C++ の UINT は、.NET の System.UInt32 相当の 4 バイト整数型です。
VB の Long は、8 バイトの System.Int64 のことなので、宣言も間違っています。
4 バイト整数型である UInteger (UInt32) か Integer (Int32) に変更する必要があるでしょう。- 回答としてマーク kizakura_ui 2020年9月30日 0:46
-
VB.NetでのLongは符号なし64bitです
Long は符合なしではなく、符号付きですね。
符号なし整数型 → Byte(8bit)、UShort(16bit)、UInteger(32bit)、ULong(64bit)
符号付き整数型 → SByte(8bit)、Short(16bit)、Integer(32bit)、Long(64bit)