トップページ > 記事閲覧
アセンブラで使いたいのですが
名前:X 日時: 2017/09/24 02:39

イギリスのGoAsmというアセンブラでDxライブラリを使おうとしてみたのですが、できませんでした。 助長ですが仕様を説明すると、.Libにある関数の呼び出しは.Libのファイル名とファンクション(関数)名を指定して呼び出す形式です。 call DxLib.lib:DxLib_Init みたいな感じです。 そしたら.Libは認識したらしいのですが、そこにDxLib_Initなる関数はないというエラーメッセージがでました。 この例では、DxLib_InitはDxLib.libではなく別のファイルに置いてあるという事でしょうか? どのファンクションがどの.libファイルに対応するのかがわかりません。
メンテ

Page: 1 | 2 |

Re: アセンブラで使いたいのですが ( No.1 )
名前:管理人 日時:2017/09/24 13:45

恐らくですが、DXライブラリはC言語のライブラリではなくC++言語のライブラリなので DxLib.lib 内の関数を単純な名前で参照できないのが原因だと思います こちらの C#用のDXライブラリのパッケージの中に https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 C言語形式で作成した DxLib.lib と、実行に必要な DxLib.dll を入れましたので、 二つのファイルを GoAsm で使用できるフォルダに入れていただき、 call DxLib.lib:dx_DxLib_Init のように記述してみてください ( C#用DXライブラリの関数は、必ず先頭に dx_ が付きますので、LoadGraph は dx_LoadGraph に DrawPixel は dx_DrawPixel というように、必ず dx_ を先頭に付けてください ) 試してはいませんが、成功する確率はC++言語形式の DxLib.lib を使用するより高いと思います 因みに C#用のDXライブラリには DrawFormatString など一部の関数が使用できませんのでご了承ください m(_ _;m
メンテ
Re: アセンブラで使いたいのですが ( No.2 )
名前:X 日時:2017/09/24 16:46

お返事ありがとうございました。 C++形式だったのですね。 クラス名などが書いていなかったのでわかりませんでした。 たしか、GoAsmではC++の呼び出しは「クラス名のメソッド」で指定ではなく、 「vtableの何番目になんたらメソッドが置かれるから何番目かで指定して呼び出し」になり、ややこしかったはずです。 C#用のDXライブラリは今、少しためしただけですが、DxLib.libの方は Cannot use import library instead of static code library! などと表示されて使えませんでしたが、 DxLib.dllだけ使ったら初期化、dx_DrawPixel、終了までエラーなしで通り、実行するところまでできました。 とりあえず解決です。有難うございました!
メンテ
Re: アセンブラで使いたいのですが ( No.3 )
名前:X 日時:2017/09/24 20:49

すいません、追加質問です。 件のC#用のライブラリの関数は、 STD CALL仕様でなく_cdeclのC CONVENTION仕様でしょうか。 STD CALLでなければ自分でスタックを直さないといけないのでお聞きしたいのですが・・・ 調べたらどうも_cdeclみたいなのです。
メンテ
Re: アセンブラで使いたいのですが ( No.4 )
名前:管理人 日時:2017/09/24 21:52

> STD CALL仕様でなく_cdeclのC CONVENTION仕様でしょうか。 stdcall で出力しています > 調べたらどうも_cdeclみたいなのです。 私が調べた限りでは stdcall になっていましたが、どのような方法で調べたのでしょうか?
メンテ
Re: アセンブラで使いたいのですが ( No.5 )
名前:管理人 日時:2017/09/24 22:07

すみません、改めて確認したところ cdecl になっていました m(_ _;m stdcall にしてみますので、少々お待ちください
メンテ

Page: 1 | 2 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存