• ベストアンサー

DLLの使い方とerror C2146について。

お世話になります。プログラミングの経験がほとんど無い初心者です。あるゲームソフトのSDKを使い自作デバイスでゲームを操作するプログラムを作りたいのですが、そのテスト段階で躓いています。(ご参考まで→ttp://www.lekseecon.nl/sdk.html) なおIDEはVC++2008ExpressEditionを使っています。エラーの内容は次の通りです。 ************** 1>------ ビルド開始: プロジェクト: PC19, 構成: Debug Win32 ------ 1>コンパイルしています... 1>PC19.cpp 1>f:\pic\myprograms\pc\pc19\LVLD_SDK.h(897) : error C2146: 構文エラー : ';' が、識別子 'LVLDSession' の前に必要です。 1>f:\pic\myprograms\pc\pc19\LVLD_SDK.h(897) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>f:\pic\myprograms\pc\pc19\LVLD_SDK.h(897) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません ************** 原因となったLVLD_SDK.h中のエラー対象行周辺は次の通りです。 ************** #define SDK_VERSION 202 #define OPEN 1 #define CLOSE 0 //(省略) __declspec(dllexport) LRESULT LVLDSession  (int flag,int LVLDVersion); //※エラー行です //(省略) ******************** プログラム本体についてはまず新規プロジェクトでWindowsフォームアプリケーションを準備し、Timerを組み込みました。SDKには3つのファイル、LVLDSDK.dll、LVLDSDK.lib、LVLD_SDK.hが内包されており、これらすべてをプロジェクトフォルダーにコピーしました。ソリューションエクスプスローラーでLVLD_SDK.hをヘッダーファイルフォルダーに、LVLDSDK.libをリソースフォルダーに参照させました。またプロジェクトのプロパティのリンカの入力、追加の依存ファイルにLVLDSDK.libを追加しました。他のコンパイル時エラーへの対応として、構成プロパティ、全般、共通言語ランタイムサポートを/clrへ変更しています。 Form1.hの先頭行近くに #include "LVLD_SDK.h" を追加し、Timerイベント内に動作確認用の命令を記述しました。 **Form1.h抜粋***** #pragma once #include "LVLD_SDK.h" (中略) #pragma endregion private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { signed int result0; result0=LVLDSession(OPEN,SDK_VERSION); } (中略) ********** 3種類のエラーが出ていますが関連性がよく分からず、まとめて質問する形になってしまいました。質問に不備がありましたらそれも叱咤ご教授いただければと思います。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お疲れ様です。 多分「LRESULT」が何か認識しきれていないのだと思います。 たしか、「windows.h」さえ読み込めば定義されているはずなので、 「Form1.h」で読み込むか、「Form1.h」を使用している箇所で読み込むかのどちらかになります。 ●「Form1.h」で読み込む場合 #include <windows.h> #pragma once #include "LVLD_SDK.h" (中略) #pragma endregion private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { signed int result0; result0=LVLDSession(OPEN,SDK_VERSION); } (中略) ●「Form1.h」を使用する側で読み込む場合 #include<windows.h> #include"Form1.h"

kurukaji
質問者

お礼

即時のご回答に感謝感激しております。大変ありがとうございました。 教えて頂いた方法で、先の問題は無事解決することができました。 しかし新たな問題に頭を抱えています。 ここで引き続きお伺いしてもよろしいでしょうか。 エラーメッセージは次のとおりです。 ********** 1>リンクしています... 1>PC19.obj : error LNK2028: 未解決のトークン (0A00001B) "long __cdecl LVLDSession(int,int)" (?LVLDSession@@$$FYAJHH@Z) が関数 "private: void __clrcall PC19::Form1::timer1_Tick(class System::Object ^,class System::EventArgs ^)" (?timer1_Tick@Form1@PC19@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 1>PC19.obj : error LNK2019: 未解決の外部シンボル "long __cdecl LVLDSession(int,int)" (?LVLDSession@@$$FYAJHH@Z) が関数 "private: void __clrcall PC19::Form1::timer1_Tick(class System::Object ^,class System::EventArgs ^)" (?timer1_Tick@Form1@PC19@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 1>F:\PIC\MyPrograms\PC\PC19\Debug\PC19.exe : fatal error LNK1120: 外部参照 2 が未解決です。 ************* よろしくお願いします。

その他の回答 (3)

  • z64423
  • ベストアンサー率53% (26/49)
回答No.4

これは #1 の補足への回答です。 リンク先を見ると   The SDK contains functions and data definitions in the C-language となってるので、(C++ではなく)Cとしてコンパイルする必要がありそうです。 #2 さんが指摘している「SDK自体のリンケージ規約がC言語」だと思います。 いま手元にはVS2008しかないのですが、   プロジェクト => (プロジェクト名)のプロパティ   構成プロパティ => C/C++ => 詳細   コンパイル言語の選択 の設定を   C++コードとしてコンパイル (/TP)  <= デフォルト   Cコードとしてコンパイル (/TC)  <= 修正後 にすれば良いのではと思います。 もしくは、ヘッダ内の C 関数プロトタイプ宣言を   #ifdef __cplusplus   extern "C" {   #endif   関数プロトタイプ宣言   …   #ifdef __cplusplus   }   #endif のように、extern "C" { ~ } で囲むかです。 ふつうはライブラリ用ヘッダはこのような書き方になっているはずですが、 「functions and data definitions in the C-language」と明示しているくらいなので、 最初の案のほうがいいかも知れませんね。 ※経験則からいうと、C と C++ が混在するような状況での  リンクエラーやマングル/デマングルに関する問題は初心者では解決できないのではないかと思います。  (自分も過去に悩んだことがあるし、後輩がこの問題に悩むのも何回か見てきた)  はっきりこのことを書いてる初心者向けの本はあまり見たこと無い。

kurukaji
質問者

お礼

ご指摘ありがとうございます。 hiro_knighさんへのお礼欄にも書きましたがSDKのReadmeにもC言語との記述がありました。お恥ずかしながらCとC++の混在が好ましくないことさえ認識していなかった、というのが正直なところです。 アドバイス頂いた[Cコードとしてコンパイル (/TC) ]を試したところ、Cに無い記述方法を指摘する(!?)エラーが沢山出てきてしまいました。 限界は感じますが解決方法はあるのですね。 ここはクローズしますが粘り強く続けてゆこうと思います。ありがとうございました。

noname#96502
noname#96502
回答No.3

まず自称初心者の方は自力でプログラムを書いて、それをコンパイルさせる能力を習得する事を目標として勉強すると良いと思います。 >1>f:\pic\myprograms\pc\pc19\LVLD_SDK.h(897) : error C2146: 構文エラー : ';' が、識別子 'LVLDSession' の前に必要です。 このエラー内容を質問して、プログラムの間違いを他の方に指摘してもらって、修正して意味があるでしょうか? 次のプログラムを作る時に同じエラーが出たときに自力で解決できるようにならないと、いつまで経っても初心者を卒業できません。 まずはエラー内容を理解する努力をしましょう。理解できないならエラーコード(上の例ならC2146)を検索サイトやMSNDで検索して詳細情報を得る努力をすると良いですよ。 自力で調べて理解出来ない事を教えてもらうようにしないと、いつまで経っても自分の知らないコンパイルエラーが発生した時に他人に助けてもらわないと解決できなくなってしまいます。 ちなみにVCならコンパイル時のエラーメッセージを(ダブル?)クリックするとエラーだとコンパイラが判断したコードをすぐ参照できます。

kurukaji
質問者

お礼

やや手痛いご意見ながら確かにおっしゃるとおりでして、コメント頂いたことを感謝しております。 アドバイスを参考にもっと勉強してから出直したいと考えています。  bravheartさん始めコメント頂いた皆様方、本当にありがとうございました。

回答No.2

コンパイルまでは正常終了して、リンクでエラーとなっています。 ライブラリの参照方法ですが、「LVLDSDK.libをリソースフォルダーに参照させました」の方法は違うのではなかったかと記憶しています。 「プロジェクト(P)」→「~のプロパティ(P)」→構成を「全ての構成」に変更→「リンカ:追加のライブラリディレクトリ」でlibを格納したフォルダを指定すればよかったはず。。。 それでも駄目なら、そのSDK自体のリンケージ規約がC言語の物の可能性があります。。。

kurukaji
質問者

お礼

教えて頂いたリンク方法を試しましたが症状は変わりませんでした。 すべてhiro_knighさんが予想されたとおりで、このライブラリはC言語のものでした。 ( SDKに同封されていたReadmeにも"How to use this SDK....for C developpers"と書いてありました ) 続きはz64423さんの欄に書くことにしますがここではお礼申したく、大変ありがとうございました。

関連するQ&A

  • C++ の LNK2001エラー

    「sample.obj : error LNK2001: 外部シンボル ""void * __cdecl SetupDiGetClassDevsW(struct _GUID *,wchar_t const *,struct HWND__ *,unsigned long)" (?SetupDiGetClassDevsW@@$$FYAPAXPAU_GUID@@PB_WPAUHWND__@@K@Z)" は未解決です。」というエラーメッセージが出ます。  ソース中に extern "C" { #include "hidsdi.h" #include <setupapi.h> } #pragma comment(lib, "setupapi.lib") #pragma comment(lib, "hid.lib")  の記述をしています。  Visual C++ 2005 Express Edition で [プロジェクト] -> [プロパティ] -> [構成プロパティ] -> [リンカ] -> [追加のライブラリ] のところにディレクトリ設定も行っています。  どのようにしたら解決できるのでしょうか。

  • C++でdllの呼び出しについて

    使用環境はVisualStudio2008、WindowsXPです。 http://www.voidtools.com/Everything-SDK.zip こちらのSDKに添付されているdllを呼び出したいと思います。 dll、lib、ヘッダーファイルをプロジェクトと同じフォルダに入れて以下のようなコードを書いてみたのですが、リンカエラーになりました。 #pragma comment(lib, "everything.lib") void __stdcall Everything_SetSearch(LPCTSTR lpString); void main(void){ Everything_SetSearch(L"ああ"); } ビルドエラーの内容 error LNK2019: 未解決の外部シンボル "void __stdcall Everything_SetSearch(wchar_t const *)" (?Everything_SetSearch@@YGXPB_W@Z) が関数 _main で参照されました。 fatal error LNK1120: 外部参照 1 が未解決です。 何か初歩的なミスをしている気もしますが、突っ込みなどなど回答の方よろしくお願いします。

  • Visual C++でのfelicaプログラム

    SONYのサイトで、SDK for NFC Starter Kit が公開されているので、ためしにFelicaカードの読み取りプログラムを作ってみようと思っています。 サンプルとして、C++が載っていましたので、Visual C++ 2010で動かそうとしましたが、 「error LNK2019: 未解決の外部シンボル __imp__initialize_library が関数 _wmain で参照されました」と表示されます。 プロジェクトのプロパティで、C/C++ → 全般 → 追加のインクルードディレクトリ もSDKのincludeのディレクトリを指定しましたし、 同じく リンカー → 全般 → 追加のライブラリディレクトリ もSDKのlibのディレクトリを指定しました。 エラーを解決する方法を教えてください。 よろしくお願いします。 なお、プログラムは簡単な下記のものでもエラーがでます。 #include "stdafx.h" #include <cstdio> #include <cstdlib> #include "felica.h" int _tmain(int argc, _TCHAR* argv[]) { initialize_library(); return 0; }

  • Visual C++,OpenCVでのリンクエラー

    こんにちは。 現在、Microsoft Visual C++ 2010 の環境で、OpenCV(ver2.3.1)を用いて、画像認識のアプリケーションを作ろうと考えています。ただ、Visual C++ 、OpenCV共に扱うのが初めてで、openCVのライブラリーをC++に認識させることができていません。 具体的には、下記の様なエラーが出ます。 「 Sample.obj : error LNK2019: 未解決の外部シンボル _cvReleaseImage が関数 _wmain で参照されました。 (同様に、以下の外部シンボルも参照できていません。_cvDestroyAllWindows、_cvWaitKey、_cvShowImage、_cvSmooth、_cvCreateImage、_cvGetSize、_cvNamedWindow、_cvLoadImage) 」 リンクの設定が上手くできていないと考え、 プロジェクト > ○○のプロパティ > 構成プロパティ > リンカー > 全般 > 追加ライブラリディレクトリ に、C:\opencv\build\x64\vc10\lib というように記入し(64bit環境です)、また、 プロジェクト > ○○のプロパティ > 構成プロパティ > リンカー > 入力 > 追加依存ファイル に、opencv_core231d.lib;opencv_imgproc231d.lib;opencv_highgui231d.lib;opencv_objdetect231d.lib;opencv_contrib231d.lib;opencv_features2d231d.lib;opencv_flann231d.lib;opencv_gpu231d.lib;opencv_haartraining_engined.lib;opencv_legacy231d.lib;opencv_ts231d.lib;opencv_video231d.lib を追加しております。 実行しているサンプルファイルは下記になります。 -------------------- // Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" //プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに // 『C:\OpenCV2.3\include』を追加のこと #include "opencv2\\opencv.hpp" #ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_core231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_imgproc231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_highgui231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_objdetect231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_contrib231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_features2d231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_flann231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_gpu231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_haartraining_engined.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_legacy231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_ts231d.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_video231d.lib") #else //Releaseモードの場合 #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_core231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_imgproc231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_highgui231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_objdetect231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_contrib231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_features2d231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_flann231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_gpu231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_haartraining_engined.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_legacy231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_ts231.lib") #pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_video231.lib") #endif int _tmain(int argc, _TCHAR* argv[]) { //画像データの読込 IplImage* src_img = cvLoadImage("C:\\opencv\\samples\\c\\lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if (src_img == NULL){ return 0; } //表示ウィンドウの作成 cvNamedWindow("src"); cvNamedWindow("dst"); //処理後画像データの確保 IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels); //画像処理例(ガウシアンフィルタ) cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9); //画像の表示 cvShowImage ("src", src_img); cvShowImage ("dst", dst_img); //キー入力待ち cvWaitKey (0); //全てのウィンドウの削除 cvDestroyAllWindows(); //画像データの解放 cvReleaseImage(&src_img); cvReleaseImage(&dst_img); return 0; } --------------- 初心者な質問で大変恐縮ながら、どこを修正すればよいかお分かりでしたら、お教え頂けませんでしょうか?何卒宜しくお願いします。

  • fatal error C1083: include ファイルを開けません というエラーが出ます

    初心者です。ソースは以下の通りです。 #include "stdafx.h" #include <cv.h> #include <highgui.h> #pragma comment(lib,"cv.lib") #pragma comment(lib,"cxcore.lib") #pragma comment(lib,"highgui.lib") int _tmain(int argc, _TCHAR* argv[]) { Ip1Image* img; //画像変数宣言 cvNamedWindow("画像表示"); // 表示ウィンドウの作成 img = cvLoadImage("Image.jpg"); //画像ファイルの読み込み if(img == NULL){ //ファイルが読み込めない場合 printf("ファイルが読み込めません。\n"); cvWaitKey(0); //キー入力待機 return -1; } cvShowImage("画像表示", img); //表示ウィンドウに画像を表示 cvWaitKey(0); //キー入力待機 cvDestroyWindow("画像表示"); //表示ウィンドウの破棄 cvReleaseImage(&img); //画像領域の解放 return 0; } 以上のソースをビルドすると、以下のようなエラーが出てしまって、うまくコンパイルすることができません。 1>------ ビルド開始: プロジェクト: ImageDisplay, 構成: Debug Win32 ------ 1>コンパイルしています... 1>ImageDisplay.cpp 1>c:\users\g031f096\documents\visual studio 2008\projects\imagedisplay\imagedisplay\imagedisplay.cpp(5) : fatal error C1083: include ファイルを開けません。'cv.h': No such file or directory 1>ビルドログは "file://c:\Users\g031f096\Documents\Visual Studio 2008\Projects\ImageDisplay\ImageDisplay\Debug\BuildLog.htm" に保存されました。 1>ImageDisplay - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== どのようにすれば通るのでしょうか?よろしくお願いします。開発環境は Visual C++ 2008 Express Editionです。

  • C++/CLIで、アンマネージC++のDLLを使用する方法

    こんにちは。 C++/CLIのプログラムで、アンマネージC++のDLLを使用したいと考えています。 ネット上をいろいろ調べたのですが、具体的な手段がわかりません。 見よう見まねで以下のようにサンプルを作成したのですが、コンパイルすら通る状況になりません。 かなり基本的な問題がありそうで申し訳ないのですが、下記の問題点を教えていただけないでしょうか。 また、参考になりそうなサイトなどありましたら教えていただけると大変助かります。 ■アンマネージC++のDLL VC++6.0で、以下のように、単にデバッグ文字列を書き出すだけのDLL関数を作成しました。 (このDLLが使用できることは他のVC++6.0プロジェクトで確認済みです) /*-----Func.h-----*/ #ifndef __FUNC_H__ #define __FUNC_H__ AFX_EXT_CLASS void WINAPI ShowMessage(); #endif //__FUNC_H__ /*-----Func.cpp-----*/ #include "StdAfx.h" #include "Func.h" #include <stdio.h> void WINAPI ShowMessage() { CString str = "This is The Message from DLL Func!\n"; OutputDebugString(str); } ■C++/CLI でのDLL使用 Visual Studio2008にて、C++のCLRプロジェクトを作成して、以下のようにDLLを使用する準備を行いました。 1.ソリューションエクスプローラのヘッダフォルダに、Func.hを追加 2.プロジェクトのフォルダに、上記で作成したFuncのDLLとLIBファイルを置く。 3.プロジェクトの「プロパティ > C/C++ > プリプロセッサ > プリプロセッサの定義」に、"_AFXDLL"を追加 4.mainクラスのソースに以下を記述 /*----------*/ using namespace System; #include "Func.h" #using "ManagedDllApp.dll" int main() { ShowMessage(); return 0; } /*----------*/ この状態でコンパイルすると、 「エラー 3 error C2144: 構文エラー : 'void' は ';' によって先行されなければなりません。 d:\xxx\Func.h 4 Console 」等、Func.h周りで複数のエラーが出ます。 また、Func.hをインポートしないでコンパイルすると、 「エラー 3 fatal error C1113: #using が 'd:\xxx\manageddllapp.dll' で失敗しました。 」と、Dllでエラーが出ます。 よろしくお願いいたします。

  • 他の.CPPファイルに定義した関数を呼び出す方法について

    新規作成したプロジェクトに、 以前自分が作成した.cppファイルと.hファイルを そのまま使えないかと考えています。 (※仮にそのファイルの名前を "define.cpp" "define.h" とします) プロジェクトに新規ファイル main.cpp を作成して、 define.hをインクルードし、 以下のようなテストのプログラムを組みました。 ・../util/define.cpp---------------------- #include <iostream> #include "define.h" void test(){ std::cout<<"test."<<std::endl; } ・../util/define.h------------------------ #pragma once void test(); ・main.cpp---------------------------- #include "../util/define.h" int main(){  test();  return 0; } 上記のソースを VisualC++7.0 でビルドすると、 main.cppの3行目で以下のようなエラーが出ました。 > LNK2019: 未解決の外部シンボル "void __cdecl test(void)" が関数 _main で参照されました VisualC++で「既存項目の追加」という項目より、 実体の定義されたdefine.cppをプロジェクトに追加していないため 当然といえば当然なのですが・・・ C言語でいうところの<stdio.h>等みたいに、 わざわざプロジェクトにCPPファイルを追加しなくても 関数を呼び出せるようには出来ないのでしょうか? 全ての関数と処理をヘッダーファイルに記述すると解決ですが 物凄く見辛いのでそれは避けたいのです。 また、色々なPC間で使っているため(学校のPCなので)、 ツール自体のプロパティを弄らない方法があるのでしたら、 多少面倒でもそちらの方が好ましいです。 追加する方法があるかどうか、 あればその方法をご存じでしたら教えていただければ嬉しいです。 よろしくお願いします。

  • 'stdafx.h'のエラーに関して

    http://tetlist.info/2011/01/17/fftw-%E3%82%92-visual-studio-2010-%E7%92%B0%E5%A2%83%E4%B8%8B%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B 上記のサイトにある下記のプログラムを実行した場合、fatal error C1083: include ファイルを開けません。'stdafx.h': No such file or directory というエラーが出ました。 間違いがわからずに困っています。もし解決方法がわかる方がいましたら教えていただけないでしょうか?よろしくおねがいいたします。 #include "stdafx.h" #include #pragma comment(lib, "libfftw3-3.lib") #pragma comment(lib, "libfftw3f-3.lib") #pragma comment(lib, "libfftw3l-3.lib") #define _USE_MATH_DEFINES #include int main(int argc, char* argv[]) { const int kSamples = 16; fftw_complex *in = reinterpret_cast(fftw_malloc(sizeof(fftw_complex) * kSamples)); fftw_complex *out = reinterpret_cast(fftw_malloc(sizeof(fftw_complex) * kSamples)); for (int t = 0; t < kSamples; t++ ) { in[t][0] = sin(2.0 * M_PI * static_cast(t) / kSamples); in[t][1] = 0; } fftw_plan p = fftw_plan_dft_1d(kSamples, in, out, FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(p); for (int t = 0; t < kSamples; t++ ) { printf("%02d\t%+5.2f%+5.2fi\n", t, out[t][0], out[t][1]); } return 0; } また、(5)で下記の記述があるので、上記の.cppファイルがある場所に下記のファイルを作製したのですが間違いでしょうか?詳しい方がいましたら教えていただけないでしょうか? よろしくお願いいたします。 (5) 実際に使用するに ライブラリを実際に使用するにあたっては stdafx.h に #include <fftw3.h> stdafx.cpp に #pragma comment(lib, “libfftw3-3.lib”) #pragma comment(lib, “libfftw3f-3.lib”) #pragma comment(lib, “libfftw3l-3.lib”) を追記すると良いはずです。

  • 「Visual C++ 2008 Express」の「PlaySoun

    「Visual C++ 2008 Express」の「PlaySound」関数について。 サイコロゲームが完成したのでBGMを入れようと思い 「PlaySound」関数を使ったところエラーに沢山阻まれうまくいきません。 --作成した経路&環境&やりたいこと-- 「Windows フォームアプリケーション」→「ソリューションも作成」 DirectXなしで「wav」ファイルを読みこみたい。 動画を添付してますが一応コードを乗せときますね。 --------------------------------------------------------------- #pragma once //ここから追加 #pragma comment(lib,"winmm.lib") #include <stdio.h> #include <windows.h> #include <mmsystem.h> //ここまで追加 namespace WinFAPI_S {  ~~省略~~ (一番下の方まできて・・・) #pragma endregion //ここから追加 int main(){ PlaySound("霊夢テーマ2.wav",NULL, SND_FILENAME | SND_NOSTOP | SND_SYNC); } }; } ------------------------------------------------------------- これをビルドすると「\Form1.h(74) : error C2664: 'PlaySoundW' : 1 番目の引数を 'const char [16]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)」 というエラーがでてしまう困っております。 このエラーを解決するにはどうしたらよいでしょうか? またソースの書き方などが間違っているとか、アドバイスなどがございましたら言ってください。 それではよろしくお願いいたします。

  • C/C++の.libについて教えてください。

    こんにちは。 C/C++のライブラリファイルについて教えてください。 現在VisualStudio2008 AcademicEditionでライブラリを制作しているのですが質問させてください。 ライブラリを制作するプロジェクトをLibA、そのライブラリを利用して実行ファイルを制作するプロジェクトをProjとします。 LibAでother()関数を利用するのに #pragma comment ( lib, "other.lib" )とソースコード上に記述しました。 (other.libは他のプロジェクトで自作したスタティックライブラリでLibAと同じフォルダに入っていると仮定します) ProjでLibAで制作したライブラリを使用するために#pragma comment ( lib, "LibA.lib" )とソースコード上に記述しました。 しかし、other.libが開けませんと怒られてしまいます。 other.libを利用しているのはLibAなのでProj側でother.libを読み込むように強制されるのは面倒臭いのですが、LibA側にother()関数を埋め込むようなことはできないのでしょうか? LibAを利用するProjでもother.libを要求されないようにするにはどうすればいいでしょうか? /* スタティックライブラリを作成するためにLibAをコンパイルする時に#pragma comment ( lib, "other.lib" )の記述が不要というのは知っています。 LibAにその記述を行わなかった場合Projで自分で記述する必要があることも知っています。 */ 現在、私が思いついているのはother.libを作成するプロジェクトのソースコードを引っ張ってきてLibAに入れて一緒にコンパイルするくらいです。 日本語がへたくそでわかりづらいところがあるかとは思いますがよろしくお願いします。