締切済み 関数から関数を呼ぶ 2002/03/22 14:26 VC++でDLLを作成しています。 超初心者です。 関数から関数を呼ぼうとしたら、 >関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。 というエラーがでました。 どういうことでしょうか? みんなの回答 (2) 専門家の回答 みんなの回答 selenity ベストアンサー率41% (324/772) 2002/03/22 20:30 回答No.2 まず、LoadLibrary("000.DLL");を行いDLLをロードします。 その後GetProcAddress("GetEndDate");でGetEndDate()のアドレスを求めないと、GetEndDate()では呼び出せません。 まずは、基本から。 呼び出し側のAddDateA()は__declspec(dllexport)は不要です。 質問者 補足 2002/03/25 10:20 うーん。 ごめんなさい。 意味がわかりません。 defファイルで、 関数名を列記するだけではダメなのでしょうか? 今度は、「GetEndDateAは定義されていない識別子、というエラーが出てしまいました。 また、VBからこの関数も使うのですが、 それでも、__declspec(dellexport)は不要ですか? そもそも、これはなんのため・・・。 かなり初歩的なことで申し訳ないです… 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 hilo256 ベストアンサー率18% (3/16) 2002/03/22 14:48 回答No.1 エラーの内容を書くよりどのようなプログラムでひっかかっているのかを書いた方が分かりやすいかと思います。 考えられるものとしては、関数の引数の型は合っていますか? また、返り値の型は合っていますか? プロトタイプ宣言と比較してみてください。 *型やアドレスわたしなど間違えやすいと思うのでチェックしてみてください。 もちろんデリミタ-や{}は大丈夫ですよね。 もしどうしても分からないようならプログラムを省略して書いてみてはいかがでしょうか。 質問者 補足 2002/03/22 15:22 アドバイスありがとうございます。 呼び出し側 extern "C" __declspec(dllexport) char __stdcall AddDateA(char * date,int dd) { int i_end; i_end = GetEndDate(date); } 呼ばれる関数 extern "C" __declspec(dllexport) int __stdcall GetEndDateA(char * date) { … } です。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 関連するQ&A c言語のエラーについて VC++でプログラムを作っていますが、コンパイルする際に以下のエラーが表示されました。 error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。 どのような意味か教えてください。 関数に値の代入 [C言語] C言語初心者です。関数とポインタについて勉強していたのですが、ふと関数の型を知りたくなってVC++で型を調べてみたんです。そしたら、void型で引数のない関数の型は void (__cdecl*)() となっていました。voidと__cdeclはわかります。 そしてこれ型に*が入ってるじゃないですか。ということは関数はポインタということになると思います。なので私はもしかしたら値の代入ができるのではないか、と思ったのです。早速、 f1=f2;(f1とf2は型と内容の同じ関数) や、 (*f1)=(*f2); としてポインタの中身や参照先の関数の実態の値を処理中に書き換えてみようとしました。ですが、多分そうなるとは思ったのですが、コンパイルエラーが出ました。 《エラーの内容》 error C2106:'=':左のオペランドが、左辺値になっていません。 warning C4550:式は引数リストのない関数として評価します。 関数を書き換えようとすること自体馬鹿げていることは重々承知です。でも、微かにいけそうな気がするんですよ。代入させたくないなら関数の型は一律constにすると思うし(実際関数をconstをつけて宣言してもOKだった、(プロトタイプ有り無しでも))、関数への代入は問答無用で駄目なのならばそういうエラーメッセージを出すと思うんです。 関数の書き換えは100%無理でしょうか?それとも関数を書き換える方法があるでしょうか?回答よろしくお願いします。 VisualStudio2010 DLL作成方法 VisualStudio2010を使っています(初心者)。 VBで作成していたのですが、一部VC++を使わなければいけなくなりました。VC++はDLLで作成して、VBの方でDLLを参照して処理を行いたいと考えています。 そこで試しに作成したVC++で作成したDLLをVBで参照しようとしたらERRORになってしまい上手にできませんでした。※ERRORの内容までは詳しく覚えてません。VC++のDLLを作成~VBのDLLの参照までを説明しているサイトなどありましたら教えて下さい。 よろしくお願いします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム VC++6.0からVBで作成したActiveX.DLL内の関数が呼出しできない VB6.0で作成したActiveX.DLLをVC++6.0(Win32SDK)側で 呼び出すプログラムを作成中です。 VB側(DLL)では問題なく作成できています。 Classに1つPublic関数を作成しただけです。 (Instancingは5MultiUseにしてあります) しかし、VC++側の呼出しでDLL内の関数が 呼び出せないのです。 LoadLibraryExでDLL自体のハンドルは取得できるのですが GetProcAddressで関数の取得時にNULLが返ってきてしまいます。 今まで試したことは ・VBからの呼出しはOK ・MFCだとOK ・SDKでもuser32.dll呼出しのサンプルは関数も実行できる です。 今からMFCへ以降するのは厳しいのでSDkでの方法を 知りたいです。 VB側が悪いのかもしれませんが、関数1つですし、 いじるところもほとんどないので多分VC++側だと 思っています。 なにか注意点とか確認するところをおしえていただければ 幸いです。 環境 Windows2000 SP3 VB6.0 SP5 VC++6.0 SP5 Win32SDK VB6からVC6で作成したDLLの関数を呼び出すときに注意すること VB6からVC6で作成したDLLの関数を呼び出すときに、型について気をつけないといけませんが、VB6でint型のものはVC6ではshortにしないといけないのでしょうか?マシンやOSや開発環境(例えばVS2005やGCC)により違ってくるのでしょうか? VB6とVC6でやり取りする場合の型について知りたいです。 あと、ActiveXのDLLの場合は関数にアクセスするのではなく、COM(という概念がわかっていないのですが)を使うのですか? 関数がDLLファイル内に見つかりません! VC++で作成した関数をVB6.0で使おうとしたんですが、 タイトルのようなエラーになってしまいます。 関数名はあっています。 なにか考えられることはありますか? VC++6.0からVB.NETで作成した関数を呼ぶことができますか? VB.NET(Visual Basic 2005 Express Edition)でクラスライブラリ(AAA.dll)を作成し、BBBというModuleにCCCというFunctionをひとつ作成しました。 そのFunctionをVC++6.0で作成したプログラムから呼び出すことは可能でしょうか?また、可能な場合はどのような手順で呼び出すことができるのでしょうか? ■VB6.0でDLLを作成した場合 DLLのファイル名とFunction名さえ指定すればVC++6.0よりLoadLibrary、GetProcAddress関数を使用して呼び出せる。 ■VB.NETでDLLを作成した場合 DLLのファイル名+Module名+Function名という構成になってしまい、従来のLoadLibrary、GetProcAddress関数ではModule名が指定できないように思われるのですが・・・どうなんでしょう。 ご存知の方いらっしゃいましたらご教授お願いいたしますm(_ _)m VisualStudio.netでmemcmp関数が使えない? 以前VC++6.0で作ったプログラムをVisualStudio.net_pro_ver2003でコンパイルしようと思っています。 VC++の空プロジェクトを作り、既存項目の追加で以前作成したソースファイルを挿入し、 それをコンパイルしました。 すると、初めにmemcmp関数が「'/clr'オプションを持つCコンパイラで完全なプロトタイプ関数が必要です」と表示され、 memcmpのある全ての行に対し、「関数へのポインタを通して実行される呼び出しに対する引数が多過ぎます」いうエラーが出てしまいます。 strings.hもインクルードしておりますし、VC++では問題なくコンパイルが通っていたので原因が良く分かりません。 そもそもVC時代から良く分からずに使っていたので基本が出来ていないようですが、 宜しく御願い致します。 VCで作成したDLLの使用 VCで作成したDLLの使用 VC6.0で作成されたDLLファイルを使いたいのですが _stdcallで記述されたものではなく DllMainで記述されたものなのですが、 VBから呼び出す事は可能でしょうか? 普通にdeclare functionで呼び出そうとすると、 「エントリfnchogeがDLLファイル hoge.dll内に関数が見つかりません。」 とエラーがでるだけでした。 VB6.0SP3 Windows2000 DLL作成で外部参照エラー? VC歴1週間です。 現在VC++2010で動的ライブラリ(DLL)を作ろうとしていますが、 作成しようとしているDLL内部で使用している関数がLIB提供されていません。 このような場合、win32プロジェクト→dll作成 を選択した状態でプロパティ変更しないで、 DLLを作ろうとするとその関数が外部参照エラーになるかと思います。 このような場合、/FORCEで強制出力してしまって良いものでしょうか? それともVC++側の設定でエラーにならずDLL生成ができるようになるものでしょうか? linuxなら cc -shared -o foo.so foo.c でライブラリ等何も気にせずシェアードライブラリが作れたので困惑しています。 よろしくご教示お願いいたします。 DLLでメンバ関数をエクスポートする方法 VC++2005でDLLを作成しています。 そこで、クラスのメンバ関数をエクスポートする必要が出てきました。 クラスのメンバ関数を __declspec(dllexport) を使用せず、 DEFファイルを使用してエクスポートするには、 どのようにしたらよろしいでしょうか。 メンバー関数ポインタ 非常に基礎的なことで申し訳ないですが。 クラスのメンバー関数へのポインタ変数へ 代入しようとすると 関数呼び出しには引数リストがありません。 とエラーがでます。 何がわるいでしょうか? 以下のような感じのコードです。 void (classname::*P_func)() = classname::func; 定義しただけと思いますが。。 VCです。 よろしくお願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 関数へのポインタ 超初心者です。 C言語を使ってsin波を生成して音を鳴らそうとしているのですが・・ネットで調べてもよくワカリマセン・・ 超初心者な私でも理解できるようなサイトを教えて下さい. また、関数へのポインタも勉強しているのですが, char *(*func)(void); といったchar 型へのポインタを返す関数へのポインタというのがあったとして,関数へのポインタは理解できたのですがさらにchar 型へのポインタとなると一体これが何を指しているのかさっぱりで・・・・ ご協力お願いします. VB6で作成したDLLをVC6で使用する方法 VB6で作成したDLLをVC6で使用できなくて困っています。 以下にトライしたことを示します。 (1) VB6でTRUEを返すだけの関数を入れたActiveX DLLを作成 (2) VC6のLoadLibraryに成功(戻り値がNULL以外) (3) VC6のGetProcAddressに失敗(戻り値がNULL) (4) VC.NET付属のDumpbinユーティリティでは(1)で作成した関数が表示されない。 何が悪いのでしょうか。 宜しくお願いします。 メモリの解放 以前にも質問があったみたいですが、 結論が載ってなかったので、質問します。 VC++で作成したDLLをVBで呼び出した場合に、 例外エラーになってしまいます。 たぶん、DLL側で確保したメモリを解放していないからだと思うんですが…。 で、解放の仕方がわかりません。 どちら側でどうやればいいのでしょうか? VC++初心者です。 お願いします。 16ビットDLLから32ビットDLLをコールする方法 現在VC++で「16ビットDLLから32ビットDLLをコール」をしようと思って 調べていましたが、このご質問に頼るしか方法がなく、困っています。 状況 VB4.0(16bit)・・・16bit版でEXEを作成 VC++1.51・・・・・16bitDLLを作成 VC++4.0/6.0・・・・32bitDLLを作成 VB4.0(16bit)のEXEから、16bit版のDLLをコールし処理を行いたいの ですが、16bit版DLLで扱えないVC++の関数(プロセス関数:spawn??()) を利用しなければならず、16bit版DLLの機能を32bit版DLLで作成し、 16bit版DLLから32bit版DLLを呼び出そうと思っております。 誰か助けて! 是非、皆様のお知恵を拝借致したく思います。 VCで作成したプログラムからMATLABあるいはMathematicaで作成した自作関数の呼び出し VCで作成したプログラムからMATLABあるいはMathematicaで作成した自作関数を呼び出したいのですが、やり方がわかりません。それ以前に、自作関数を呼び出すことができるのかもわかりません。ご存知の方はご教授をお願いします。 ちなみに、MATLABのホームページで調べてみたところ、MATLABが用意する関数を呼び出すことができるみたいです。自作関数を呼び出す方法についての説明は見当たりませんでした。また、DLLやCOMオブジェクトを作成する方法がありましたが、DLLやCOMではなく、MATLABファイルに記述された自作関数が呼び出せるようにしたいのです。Mathematicaについては全くわかりません。 自作関数を呼び出したい理由としては、数値解析のプログラムをVCで作っているのですが、このプログラムのコアとなる数値解析をおこなう処理をMATLABやMathematicaで作成した自作関数にまかせ、このコアとなる数値解析の処理を簡単に書き換えができるようにしたいのです。 以上、よろしくお願いします。 c++からdll内の関数を呼ぶ記述方法が知りたいです。 VC++2008 Expressを使っています。 c++からdll内の関数を呼ぶ記述方法が知りたいです。 hoge.dllの関数 int test(int x); c++ ?????????? エクセル関数 決算書作成するのですが、支出(-)・収入(+)・合計お出す関数の式はあるのでしょうか、 初心者で関数のことがよくわかりません、宜しくお願いします。 API関数とDLL関数 API関数とDLL関数って同じものですか? ネットで調べると・・・ API関数=Win API→ひとつひとつの関数(単独で機能するプログラムコード の塊)。 API関数はdllファイルの中にある関数をさす。 とのようなことが書いてあります。つまり、DLL関数(私の認識であると、.dllファイルの中にある関数)であり、この関数はAPI関数と同定義と認識しています。 まだまだ初心者で、この認識があっているか確信がもてません。 どうか教えていただけないでしょうか?? お願いいたします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
補足
うーん。 ごめんなさい。 意味がわかりません。 defファイルで、 関数名を列記するだけではダメなのでしょうか? 今度は、「GetEndDateAは定義されていない識別子、というエラーが出てしまいました。 また、VBからこの関数も使うのですが、 それでも、__declspec(dellexport)は不要ですか? そもそも、これはなんのため・・・。 かなり初歩的なことで申し訳ないです…