HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1124
wow-wowどこで質問すればいいのでしょうか18未解決


wow-wow

リンク

2008/11/24(Mon) 14:57:33|NO.21008

VisualC++を使ってHSP用のプラグインを作っていて、
そこでわからないところがあるので質問したいのですが、
ここで質問してもよろしいのでしょうか?
また、もしだめならどこで質問するといいのでしょうか?
教えてください。



この記事に返信する


f(浮気中)

リンク

2008/11/25(Tue) 00:29:10|NO.21023

・・・放置も良くなさそうだな。


純粋にVC++の話なら他へ。
HSPのSDK絡みの話なら、ココで言ってみても良いかもしれんが、
答えられる奴が居るかどうかは別問題だ。


まー後者だと言うなら試しに言って見れ。



wow-wow

リンク

2008/11/25(Tue) 07:26:46|NO.21024

・・・そうですか。
でもHSPのSDKがらみかもしれないので、質問します。

プラグインを作るために、SDKを手順に沿って初期化したのですが、
ビルドしようとすると未解決のシンボルが多数見つかり、初期化できません。
私のやり方が悪いと思い、サンプルをビルドしてみたのですが、
これも未解決のシンボルが見つかりました。
でも、サンプルは動いてます。なぜなのか教えてください。



f(浮気中)

リンク

2008/11/25(Tue) 08:15:04|NO.21027

・・・もっと具体的に言え。

まずVSは2005か2008か、スタンダードなのかエクスプレスなのか?
で、プロジェクトに入ってるソースは何と何と何だ?
エラーなり警告なりのもっと具体的な表現は?
見つからんシンボルの具体的な名前は?
そんなあやふやな話だけで何を答えさせる気だ?



ちなみに俺はHSPSDK使うのが面倒なので普通にDLLをこさえている。
ので、SDKにあんまり詳しくない事は先に断っておく。



wow-wow

リンク

2008/11/25(Tue) 16:27:40|NO.21032

VCはMicroSoft社制の2008Expressです。
プロジェクトに入っているソースは、HSPPluginとDLLMAINという名のソースです。
エラーは普通にビルドエラーで、

xmodule.obj : error LNK2019: 未解決の外部シンボル "void __cdecl hsp3sdk_init(struct HSP3TYPEINFO *)" (?hsp3sdk_init@@YAXPAUHSP3TYPEINFO@@@Z) が関数 _hsp3cmdinit@4 で参照されました。
xmodule.obj : error LNK2001: 外部シンボル ""struct HSPCTX * ctx" (?ctx@@3PAUHSPCTX@@A)" は未解決です。
xmodule.obj : error LNK2001: 外部シンボル ""struct HSPEXINFO * exinfo" (?exinfo@@3PAUHSPEXINFO@@A)" は未解決です。
ファイル名 : fatal error LNK1120: 外部参照 3 が未解決です。

と出てきました。



SYAM

リンク

2008/11/25(Tue) 16:51:35|NO.21033

質問にやや引っかかりを覚えたので確認させてください。
もし勘違いなら大変失礼ですがご容赦を。

「サンプルは動いてます」
とはどういう意味でしょうか?
SDKにはビルド済みのDLLファイルが入っていますから、もちろん動きはすりでしょうが……サンプルが動く理由が分からないというのは、「ビルドとは何をすることなのか」という知識が抜け落ちているように見えます。…そこは大丈夫でしょうか?

「シンボルが未解決」というのは、乱暴にいうと「宣言だけして実際には作られていない関数や変数を使っちゃってるよ」という意味です。
エラーにある「未解決のシンボル」が示すものは、SDKに入っているソースの中で定義、つまり実際に作られています。
ですから、それをコンパイルして組み込まないといけません。



wow-wow

リンク

2008/11/25(Tue) 17:23:19|NO.21034

私はDLLについてはあまり詳しくはないのですが、
DLLというものは、ソースをビルドしてそこから作っているのですよね?
そこで、ビルドエラーが出るとDLLは作られない。
でも、私がサンプルのソースをビルドしようとするとエラーが出るのに、
どうやってDLLを作ったのだろう?ということです。

・・・はぁ、なにぶんC++の知識も大体がうろ覚えですからね。



soral

リンク

2008/11/25(Tue) 18:41:17|NO.21038

hsp3plugin.cppをプロジェクトに追加してください



wow-wow

リンク

2008/11/25(Tue) 20:22:10|NO.21041

いろいろ質問してきたのですが、
どうもC++よりの会話になってきているので、
ここでの会話を続けながら、どなたかDLLについて詳しい方がいれば
別の掲示板などで教えてもらいたいことがあるので
DLLに詳しい人がいれば教えてください。



f(浮気中)

リンク

2008/11/26(Wed) 00:20:15|NO.21043

これはhsp3.0の頃の話だが


俺が作ったプラグインのプロジェクトトを見ると、


hspdebug.h
hspplugin.h
hspstruct.h
hspvar_core_h
hspwnd.h

hspplugin.cpp

これだけのファイルが入っているんだがな。


まあ、何が必要で何が必要でないかは気にせず適当に入れてあるが。



ANTARES

リンク

2008/11/26(Wed) 00:58:16|NO.21046

 ExpressではWin32 DLLプロジェクトが作れないので、HSP用DLLは作れないのでは?
試してないけど、CLRクラスライブラリの関数はHSPからは呼び出せないのでは?
それが可能なら、HSPからDotNet Class Libraryが呼び出せるはずだから
うほうほなんだけど……。



f(浮気中)

リンク

2008/11/26(Wed) 18:06:18|NO.21055

>ExpressではWin32 DLLプロジェクトが作れないので、HSP用DLLは作れないのでは?

マジで!?

それは知らなかった。



GENKI

リンク

2008/11/26(Wed) 19:21:40|NO.21056

> ExpressではWin32 DLLプロジェクトが作れないので、HSP用DLLは作れないのでは?

DLL作ったことないのでよく分からないので、少し調べてみました。

[Visual C++ 2008 Express Edition]の場合 ・ファイル -> 新規作成 -> プロジェクト ・新しいプロジェクトダイアログで「Win32コンソールアプリケーション」を選択。 ・適当なプロジェクト名を入れてokをクリック。 ・次へ。 ・アプリケーションの種類:DLL ・完了。
これでできるっぽい気がするんですが、ダメなんでしょうか。



よく見てないけど多分関連資料:
http://hspdev-wiki.net/?MakeHPI



soral

リンク

2008/11/26(Wed) 19:59:21|NO.21057

[Visual C++]-->[Win32]-->[Win32 プロジェクト]
[アプリケーションの設定]-->[アプリケーションの種類]-->[DLL]

Visual Studio Express Editionにおいても、
この手順でアンマネージDLLのテンプレートを出力させることができます。

wow-wowさんが今ここで質問されている問題は、
先の返答でfさんが挙げられているファイルを"全て"プロジェクトに追加することで解決するはずです。

>>ANTARESさん
>それが可能なら、HSPからDotNet Class Libraryが呼び出せるはず

HSPへのプラグイン仕様に則り、CLRへの仲介を行う混合モードDLLを作成することで可能です。



f(浮気中)

リンク

2008/11/26(Wed) 20:03:06|NO.21058

んん?

それは「WIN32コンソール」と「WIN32プロジェクト」の違いが有るが
俺が普通にDLLのプロジェクトを作る時の手順と同じだな。



ANTARES

リンク

2008/11/27(Thu) 00:44:35|NO.21060

 Win32 コンソールアプリケーションを選んでDLLが作れるなんて……。
ていうか、2005 Expressではダメだったので、2008でも同じかと思ってました。

>HSPへのプラグイン仕様に則り、CLRへの仲介を行う混合モードDLLを作成することで可能です。
 使いたいメソッドやプロパティの媒介関数というか、wrapper関数のようなものを
作ればいいということですか。MD5とか暗号化とかはそのくらいやる価値がありそうです。



soral

リンク

2008/11/27(Thu) 18:49:35|NO.21074

2005の頃から同じ手順で作れましたよ(^^;

> 使いたいメソッドやプロパティの媒介関数というか、wrapper関数のようなものを
> 作ればいいということですか。MD5とか暗号化とかはそのくらいやる価値がありそうです。

CLRのロード時にかなりの負荷がかかるので「やる価値」があるかどうかは微妙なところかもしれません。
文字列からリフレクションを経由してメソッドを呼び出す汎用プラグインを開発できると良いのですが・・・



GENKI

リンク

2008/11/27(Thu) 19:55:00|NO.21077

> ていうか、2005 Expressではダメだったので、2008でも同じかと思ってました。

> 2005の頃から同じ手順で作れましたよ(^^;

調べてみました。

VisualStudioC++2005 ExpressEditionは、デフォルトではDLLもWin32 アプリケーションは作成できないそうです。
DLL等を作成できるようにするためには、Platform SDK のインストールが必要とのこと。
参考資料:
ttp://watcher.moe-nifty.com/memo/2006/05/visual_studio_c_4427.html

2008EEには標準でPlatform SDKが同梱されています。



s

リンク

2008/11/28(Fri) 00:37:51|NO.21087

たしかに2005はできませんでしたね
2008は便利すぎて何故無料なのかよくわかりません

自分も計算をC++に任せようとしたことがありますが、
難しくて挫折しましたw
HSPは宣言とかを省略できるのでとても楽ですよね



ONION software Copyright 1997-2023(c) All rights reserved.