3

Visual C++ 2008 SP1 で非常に単純なプログラムを作成しました。2 つの数値を加算するだけです。DLLTest.cpp は次のとおりです。

#include "DllTest.h"

    __declspec(dllexport) double Add(double a, double b)
    {
    return( a + b );
}

そして DllTest.h は次のとおりです。

#ifndef _DLL_TEST_H_
#define _DLL_TEST_H_
#endif

__declspec(dllexport) double Add( double, double);

Visual C++ 2008 を使用して DLL をビルドします。 を使用してライブラリをロードしようとするとloadlibrary、次のエラーが発生します。

??? 422 での ==> loadlibrary の使用エラー DllTest_thunk_pcwin64 のビルドに失敗しました。コンパイラ出力: DllTest_thunk_pcwin64.c C:\Users\Admin\Desktop\DllTest.h(5) : エラー C2054: '(' が 'EXPORTED_FUNCTION' に続くと予想されます C:\Users\Admin\Desktop\DllTest.h(5) : エラー C2085: 'Add': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(40): エラー C2085: 'int8': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(41): エラー C2085: 'uint8': 仮パラメーターにありませんリスト DllTest_thunk_pcwin64.c(42): エラー C2085: 'int16': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(43): エラー C2085: 'uint16': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(44): エラー C2085: ' int32': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(45): エラー C2085: ' uint32': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(46): エラー C2085: 'int64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(47): エラー C2085: 'uint64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c( 48): エラー C2085: 'voidPtr': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(49): エラー C2085: 'string': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(51): エラー C2082: 仮パラメータ 'EXPORTED_FUNCTION の再定義' DllTest_thunk_pcwin64.c(51): エラー C2143: 構文エラー: ';' がありません 'type' DllTest_thunk_pcwin64.c(52) の前: エラー C2085: 'EXPORTED_FUNCTIONdoubledoubledoubleThunk': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(52): エラー C2143: 構文エラー: ';' がありません 前 '{' : 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(46): エラー C2085: 'int64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(47): エラー C2085: 'uint64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(48) : エラー C2085: 'voidPtr': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(49): エラー C2085: 'string': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(51): エラー C2082: 仮パラメータ 'EXPORTED_FUNCTION' の再定義 DllTest_thunk_pcwin64 .c(51): エラー C2143: 構文エラー: ';' がありません 'type' DllTest_thunk_pcwin64.c(52) の前: エラー C2085: 'EXPORTED_FUNCTIONdoubledoubledoubleThunk': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(52): エラー C2143: 構文エラー: ';' がありません 前 '{' : 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(46): エラー C2085: 'int64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(47): エラー C2085: 'uint64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(48) : エラー C2085: 'voidPtr': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(49): エラー C2085: 'string': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(51): エラー C2082: 仮パラメータ 'EXPORTED_FUNCTION' の再定義 DllTest_thunk_pcwin64 .c(51): エラー C2143: 構文エラー: ';' がありません 'type' DllTest_thunk_pcwin64.c(52) の前: エラー C2085: 'EXPORTED_FUNCTIONdoubledoubledoubleThunk': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(52): エラー C2143: 構文エラー: ';' がありません 前 '{' 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(46): エラー C2085: 'int64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(47): エラー C2085: 'uint64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(48):エラー C2085: 'voidPtr': 正式パラメーター リストにありません DllTest_thunk_pcwin64.c(49): エラー C2085: 'string': 正式パラメーター リストにありません DllTest_thunk_pcwin64.c(51): エラー C2082: 正式パラメーター 'EXPORTED_FUNCTION' DllTest_thunk_pcwin64 の再定義。 c(51): エラー C2143: 構文エラー: ';' がありません 'type' DllTest_thunk_pcwin64.c(52) の前: エラー C2085: 'EXPORTED_FUNCTIONdoubledoubledoubleThunk': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(52): エラー C2143: 構文エラー: ';' がありません 前 '{' 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(46): エラー C2085: 'int64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(47): エラー C2085: 'uint64': 仮パラメータ リストにありません DllTest_thunk_pcwin64.c(48):エラー C2085: 'voidPtr': 正式パラメーター リストにありません DllTest_thunk_pcwin64.c(49): エラー C2085: 'string': 正式パラメーター リストにありません DllTest_thunk_pcwin64.c(51): エラー C2082: 正式パラメーター 'EXPORTED_FUNCTION' DllTest_thunk_pcwin64 の再定義。 c(51): エラー C2143: 構文エラー: ';' がありません 'type' DllTest_thunk_pcwin64.c(52) の前: エラー C2085: 'EXPORTED_FUNCTIONdoubledoubledoubleThunk': 仮パラメーター リストにありません DllTest_thunk_pcwin64.c(52): エラー C2143: 構文エラー: ';' がありません 前 '{'

Visual C++ で記述された単純なプログラムを MATLAB にロードしたいだけです。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

私の質問を考えてくれてありがとう。問題が見つかりました。実際には、2 つの問題がありました。1) MATLAB は 64 ビットですが、32 ビット DLL を作成したため、Visual Studio の設定を変更して 64 ビット DLL を作成する必要がありました。2) MATLAB が DLL をロードするために使用するコンパイラは、'extern "C"' コマンドに問題があるようです。そこで、ヘッダーを次のように変更しました。

#ifndef DllTest_h
#define DllTest_h

#include <stdio.h>

#ifdef __cplusplus

extern "C" {

#endif
__declspec(dllexport) double Add( double, double);

#ifdef __cplusplus
}
#endif


#endif

そして最後にそれはうまくいきました。

于 2013-01-22T16:53:40.253 に答える