0

私はmatlabでclllib関数を使用しようとしています.dllファイルと.hファイルを開発中の.m MATLABファイルと同じディレクトリに置き、その後loadlibrary関数buiを使用しようとしましたが、いくつかの警告があります

警告:

Warning: 
Message from C preprocessor:

lcc preprocessor error: C:\Users\MAHNAZ\Documents\MATLAB\T1Header.h:1 Could not find include file
<iostream>

lcc preprocessor warning: C:\Users\MAHNAZ\Documents\MATLAB\T1Header.h:21 EOF inside comment

> In loadlibrary at 351

Warning: The function 'Add' was not found in the library

> In loadlibrary at 435

Warning: The function 'Function' was not found in the library

> In loadlibrary at 435

calllib次のような関数を使用したい場合: calllib('t1', 'Add', 2,3)matlab でエラーが発生します:

??? Error using ==> calllib Method was not found.

私のヘッダーファイルは次のとおりです。

#ifndef T1_HEADER_H
#define T1_HEADER_H
extern int Add( int a, int b );
extern void Function( void );
#endif

私のソースファイルは次のとおりです。

#include iostream
#include "T1Header.h"

  extern int Add( int a, int b )
   {
       return( a + b );
   }

  extern void Function( void ) 
  { 
     std::cout << "DLL Called!" << std::endl;
  }

Visual C++ 2010 と Matlab 7.6.0(R2008a) を使用しています。

何が間違っているか、このエラーを修正するために何ができるか、または MATLAB 内からこの .dll を呼び出すために他に何ができるかについての提案はありますか?

4

1 に答える 1

0

前もっていくつかのメモとコメント:

  • iostream の読み込みエラーは、コードが C++ ではなく C として処理されていたように聞こえます。
  • 貼り付けたソース ファイルには名前の周りに山かっこがありませんがiostream、この投稿を書いたときに失われたと思います。
  • extern関数を定義するときは、そうすべきではありません。
  • 貼り付けたエラー メッセージには、貼り付けに含まれていないコメントが含まれています。
  • matlab がヘッダーを調べていることに少し驚いています。DLL ファイルのみを使用すると想定していたでしょう。

しかし、DLL ファイルが最終的に作成されたと仮定すると、この問題の主な理由は次のとおりです。Matlab はおそらくC 呼び出し規則を使用するため、ヘッダーと実装の両方で関数をextern "C" { … }ブロックで囲む必要があります。

于 2012-08-07T12:24:13.793 に答える