VC++.NETでasmファイル内で定義された関数の呼出が実装された
DLLを作成したいのですが。どなたかご教授願えませんでしょうか?
スイマセン。もう少し書きます。
以下 .asm ファイルソース
=================================================
.386
.model flat, c
INCLUDE P_RS232J.inc
.code
reset_232 PROC
<処理中略>
reset_232 ENDP
end
=================================================
最終的に、このファイルで定義されている reset_232 を呼び出せるようにしたい
と思っています。
このファイル内でインクルード宣言されている P_RS232J.inc ファイルですが
このファイルの説明の前に reset_232 のプロトタイプを宣言している
ヘッダーファイルについて説明します。
以下 p_rs232j.h ソース
=================================================
/* PROTTYPE */
void reset_232( void ) ;
=================================================
ソースは上記のみですが
カスタムビルドステッププロパティに以下の設定をしています。
コマンドライン:h2inc /WIN32 /Gd "$(InputPath)"
出力ファイル:$(InputDir)\$(InputName).inc
この設定により、ビルド時に先程の P_RS232J.inc ファイルが作成されます。
以下 P_RS232J.inc ファイル
=================================================
option expr32
option casemap:none
; Begin of file <ファイルパス>
@proto_0 TYPEDEF PROTO C
reset_232 PROTO @proto_0
; End of file <ファイルパス>
=================================================
また .asmファイルのカスタムビルドステッププロパティに以下の設定を
しています。
コマンドライン:ml -c -Zi "-Fl$(IntDir)\$(InputName).lst" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
出力ファイル:$(IntDir)\$(InputName).obj
追加の依存ファイル:$(InputDir)\$(InputName).inc
これらの作成の後以下の .cファイルを作成しました。
(とりあえずexeとして動作を試す為に構成の種類はexeにしてあります。)
=================================================
#include "p_rs232j.h"
int main( int argc, char* argv[] )
{
reset_232() ;
return 0 ;
}
=================================================
コンパイルは通るのですが、リビルドを実行するとリンクエラーが発生します。
エラー内容は以下の通りです。
LNK1561: エントリー ポイントを定義しなければなりません。
なにがいけないのでしょうか。御教授頂けると幸いです。
LNK1561自体は,
・Windows ApplicationなのにWinMainがない
・Console Applicationなのにmainがない
といった時に起きます。
DLLへの公開は,DEFファイルを書いてやれば可能かと。
YuOさん。御回答ありがとうございます。
申し訳ありませんが、ここでもう1つ質問をさせてください。
int main( int argc, char* argv[] )
はコンソールアプリケーションのエントリーポイントとして
みなされないのでしょうか。
通常はみなされますが。
/ENTRYを追加したり,
/SUBSYSTEMを間違えたりしていませんか。
YuOさん。返信が遅くなり申し訳ありません。
プロパティページのエントリーポイントの設定は空。
SUBSYSTEMはコンソールになっています。
すいません。自己解決しました。
YuOさん。ありがとうございました。
ツイート | ![]() |