asmファイルで定義された関数を呼び出すには?

解決


ZUKI-MU  2005-07-08 00:34:49  No: 58209

VC++.NETでasmファイル内で定義された関数の呼出が実装された
DLLを作成したいのですが。どなたかご教授願えませんでしょうか?


ZUKI-MU  2005-07-08 01:41:23  No: 58210

スイマセン。もう少し書きます。

以下 .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: エントリー ポイントを定義しなければなりません。

なにがいけないのでしょうか。御教授頂けると幸いです。


YuO  2005-07-08 03:17:48  No: 58211

LNK1561自体は,
・Windows ApplicationなのにWinMainがない
・Console Applicationなのにmainがない
といった時に起きます。

DLLへの公開は,DEFファイルを書いてやれば可能かと。


ZUKI-MU  2005-07-08 21:49:40  No: 58212

YuOさん。御回答ありがとうございます。
申し訳ありませんが、ここでもう1つ質問をさせてください。

int main( int argc, char* argv[] )

はコンソールアプリケーションのエントリーポイントとして
みなされないのでしょうか。


YuO  2005-07-09 00:20:51  No: 58213

通常はみなされますが。

/ENTRYを追加したり,
/SUBSYSTEMを間違えたりしていませんか。


ZUKI-MU  2005-07-09 02:29:11  No: 58214

YuOさん。返信が遅くなり申し訳ありません。

プロパティページのエントリーポイントの設定は空。
SUBSYSTEMはコンソールになっています。


ZUKI-MU  2005-07-09 03:57:21  No: 58215

すいません。自己解決しました。
YuOさん。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加