C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VC++のDLLをVB.NETでコールするとエラーになる


(過去ログ 73 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■42535 / inTopicNo.1)  VC++のDLLをVB.NETでコールするとエラーになる
  
□投稿者/ さきた (1回)-(2009/10/17(Sat) 09:34:04)

分類:[VB.NET/VB2005 以降] 

現在、VC++で作成したDLLを
VB.NETでコールする処理を作成しているのですが、
「エントリポイントがみつかりません」と言われ、実行できません。

下記はVB.NETとVC++のソースです。
どの部分が悪いのでしょうか??

使用エディタ:VS2005


VB.NET
Form1.vb----------
Imports System.Runtime.InteropServices

Public Class Form1
<DllImport("DllTest.dll")> _
Public Shared Function average _
(ByVal Add1 As Integer, _
ByVal Add2 As Integer) _
As Integer
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Sum As Integer = CInt(Me.TextBox1.Text) + CInt(Me.TextBox2.Text)
Dim Ave As Integer = average(CInt(Me.TextBox1.Text), CInt(Me.TextBox2.Text))
MessageBox.Show(Sum.ToString, "合計値", _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
MessageBox.Show(Ave.ToString, "平均値", _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End Sub
End Class
----------------------------------

VC++
DllTest.cpp------------------------------
#include <windows.h>
#include "DllTest.h"
extern "C" int average(int ,int );
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
return TRUE;
}
// 平均値算出関数
int average(int n1,int n2)
{
return (n1+n2)/2;
}
DllTest.def----------------------------
LIBRARY "DllTest"
DESCRIPTION "モジュール定義ファイル"
VERSION 1.1 ; とりあえず適当にVerセット
EXPORTS
average @1 NONAME
------------------------------------


引用返信 編集キー/
■42540 / inTopicNo.2)  Re[1]: VC++のDLLをVB.NETでコールするとエラーになる
□投稿者/ オショウ (341回)-(2009/10/17(Sat) 11:48:00)
No42535 (さきた さん) に返信
> <DllImport("DllTest.dll")> _
> Public Shared Function average _
> (ByVal Add1 As Integer, _
> ByVal Add2 As Integer) _
> As Integer
> End Function

> DllTest.def----------------------------
> LIBRARY "DllTest"
> DESCRIPTION "モジュール定義ファイル"
> VERSION 1.1 ; とりあえず適当にVerセット
> EXPORTS
> average @1 NONAME
> ------------------------------------

  http://msdn.microsoft.com/ja-jp/library/hyx1zcd3(VS.80).aspx
  EXPORTS の仕様をよく確認して下さい。

  NONAME の場合、序数指定でないと、Declare宣言の関数の名前解決に
  失敗します。逆に名前で行いたい場合は、NONAMEではなく、公開した
  い関数名を指定します。

  他にも突っ込みどころあるんですが・・・

  まずはここまで。

以上。参考まで
引用返信 編集キー/
■42543 / inTopicNo.3)  Re[2]: VC++のDLLをVB.NETでコールするとエラーになる
□投稿者/ さきた (2回)-(2009/10/17(Sat) 13:26:23)
No42540 (オショウ さん) に返信
> ■No42535 (さきた さん) に返信
>> <DllImport("DllTest.dll")> _
>> Public Shared Function average _
>> (ByVal Add1 As Integer, _
>> ByVal Add2 As Integer) _
>> As Integer
>> End Function
>
>>DllTest.def----------------------------
>>LIBRARY "DllTest"
>>DESCRIPTION "モジュール定義ファイル"
>>VERSION 1.1 ; とりあえず適当にVerセット
>>EXPORTS
>> average @1 NONAME
>>------------------------------------
>
>   http://msdn.microsoft.com/ja-jp/library/hyx1zcd3(VS.80).aspx
>   EXPORTS の仕様をよく確認して下さい。
>
>   NONAME の場合、序数指定でないと、Declare宣言の関数の名前解決に
>   失敗します。逆に名前で行いたい場合は、NONAMEではなく、公開した
>   い関数名を指定します。
>
>   他にも突っ込みどころあるんですが・・・
>
>   まずはここまで。
>
> 以上。参考まで


回答ありがとうございます。
NONAMEキーワードを設定すると
関数名ではなく序数を用いて指定する必要があるという事でしょうか。

今回は関数名での指定を行いたかった為、
NONAMEキーワードを削除する事で
VB.NET側から無事コール出来ました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -