質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1803閲覧

C++ Windowsアプリケーションにおけるextern "C"関連のエラー

hsgru3

総合スコア22

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/03/24 06:56

前提・実現したいこと

C++でIntel RealSense F200というwebカメラの映像を表示するwindowsフォームアプリケーションの作成

発生している問題・エラーメッセージ

LNK2028 未解決のトークン (0A0014DC) "extern "C" unsigned long __stdcall timeGetTime(void)" (?timeGetTime@@$$J10YGKXZ) が関数 "void __clrcall `dynamic initializer for 'lastTime''(void)" (???__ElastTime@@YMXXZ@?A0xabaf9275@@$$FYMXXZ) で参照されました。 LNK2019 未解決の外部シンボル "extern "C" unsigned long __stdcall timeGetTime(void)" (?timeGetTime@@$$J10YGKXZ) が関数 "void __clrcall `dynamic initializer for 'lastTime''(void)" (???__ElastTime@@YMXXZ@?A0xabaf9275@@$$FYMXXZ) で参照されました。 LNK2019 未解決の外部シンボル _Direct3DCreate9@4 が関数 "public: bool __thiscall UtilRenderD3D::RenderFrame(class Intel::RealSense::Image *)" (?RenderFrame@UtilRenderD3D@@QAE_NPAVImage@RealSense@Intel@@@Z) で参照されました。 LNK2019 未解決の外部シンボル _MFCopyImage@24 が関数 "public: bool __thiscall UtilRenderD3D::RenderFrame(class Intel::RealSense::Image *)" (?RenderFrame@UtilRenderD3D@@QAE_NPAVImage@RealSense@Intel@@@Z) で参照されました。 LNK1120 4 件の未解決の外部参照

該当のソースコード

C++

1#pragma once 2 3#include <iostream> 4#include <vector> 5#include "string.h" 6#include "opencv2\opencv.hpp" 7#include "pxcsensemanager.h" 8#include "PXCProjection.h" 9 10PXCSenseManager *senseManager = 0; 11 12//カラー画像 13cv::Mat colorImage; 14 15//座標変換インスタンス 16PXCProjection *projection = nullptr; 17 18//デプス画像の距離情報格納バッファ 19std::vector<unsigned short> depthBuffer; 20 21//カラー画像の幅、高さ、解像度 22const int COLOR_WIDTH = 640; 23const int COLOR_HEIGHT = 480; 24const int COLOR_FPS = 30; 25 26//デプス画像の幅、高さ、解像度 27const int DEPTH_WIDTH = 640; 28const int DEPTH_HEIGHT = 480; 29const int DEPTH_FPS = 30; 30 31namespace USPver3 { 32 33 using namespace System; 34 using namespace System::ComponentModel; 35 using namespace System::Collections; 36 using namespace System::Windows::Forms; 37 using namespace System::Data; 38 using namespace System::Drawing; 39 40 /// <summary> 41 /// USP の概要 42 /// </summary> 43 public ref class USP : public System::Windows::Forms::Form 44 { 45 public: 46 USP(void) 47 { 48 InitializeComponent(); 49 // 50 //TODO: ここにコンストラクター コードを追加します 51 // 52 } 53 54 protected: 55 /// <summary> 56 /// 使用中のリソースをすべてクリーンアップします。 57 /// </summary> 58 ~USP() 59 { 60 if (components) 61 { 62 delete components; 63 } 64 } 65 private: System::Windows::Forms::PictureBox^ pictureBox1; 66 protected: 67 68 private: 69 /// <summary> 70 /// 必要なデザイナー変数です。 71 /// </summary> 72 System::ComponentModel::Container ^components; 73 74#pragma region Windows Form Designer generated code 75 /// <summary> 76 /// デザイナー サポートに必要なメソッドです。このメソッドの内容を 77 /// コード エディターで変更しないでください。 78 /// </summary> 79 void InitializeComponent(void) 80 { 81 this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox()); 82 (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->BeginInit(); 83 this->SuspendLayout(); 84 // 85 // pictureBox1 86 // 87 this->pictureBox1->Location = System::Drawing::Point(12, 12); 88 this->pictureBox1->Name = L"pictureBox1"; 89 this->pictureBox1->Size = System::Drawing::Size(735, 416); 90 this->pictureBox1->TabIndex = 0; 91 this->pictureBox1->TabStop = false; 92 // 93 // USP 94 // 95 this->AutoScaleDimensions = System::Drawing::SizeF(6, 12); 96 this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 97 this->ClientSize = System::Drawing::Size(759, 440); 98 this->Controls->Add(this->pictureBox1); 99 this->Name = L"USP"; 100 this->Text = L"USP"; 101 (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->EndInit(); 102 this->ResumeLayout(false); 103 104 } 105#pragma endregion 106 107 // 初期化 108 private: System::Void USP_Load(System::Object^ sender, System::EventArgs^ e) 109 { 110 // SenseManagerを生成する 111 senseManager = PXCSenseManager::CreateInstance(); 112 if (senseManager == 0) { 113 throw std::runtime_error("SenseManagerの生成に失敗しました"); 114 } 115 116 // カラーストリームを有効にする 117 auto sts = senseManager->EnableStream(PXCCapture::StreamType::STREAM_TYPE_COLOR, 118 COLOR_WIDTH, COLOR_HEIGHT, COLOR_FPS); 119 if (sts < PXC_STATUS_NO_ERROR) { 120 throw std::runtime_error("カラーストリームの有効化に失敗しました"); 121 } 122 123 // Depthストリームを有効にする 124 sts = senseManager->EnableStream(PXCCapture::StreamType::STREAM_TYPE_DEPTH, 125 DEPTH_WIDTH, DEPTH_HEIGHT, DEPTH_FPS); 126 if (sts < PXC_STATUS_NO_ERROR) { 127 throw std::runtime_error("Depthストリームの有効化に失敗しました"); 128 } 129 130 // パイプラインを初期化する 131 sts = senseManager->Init(); 132 if (sts < PXC_STATUS_NO_ERROR) { 133 throw std::runtime_error("パイプラインの初期化に失敗しました"); 134 } 135 136 // デバイスを取得する 137 auto device = senseManager->QueryCaptureManager()->QueryDevice(); 138 139 // 座標変換オブジェクトを作成 140 projection = device->CreateProjection(); 141 142 // depthBufferの作成 143 depthBuffer.resize(DEPTH_WIDTH * DEPTH_HEIGHT); 144 145 } 146 147 // フレームを更新する 148 private: System::Void updateFrame() 149 { 150 // フレームを取得する 151 pxcStatus sts = senseManager->AcquireFrame(false); 152 if (sts < PXC_STATUS_NO_ERROR) { 153 return; 154 } 155 156 // フレームデータを取得する 157 const PXCCapture::Sample *sample = senseManager->QuerySample(); 158 if (sample) { 159 // 各データを表示する 160 updateColorImage(sample->color); 161 } 162 163 // フレームを解放する 164 senseManager->ReleaseFrame(); 165 // カラー画像を更新する 166 private: System::Void updateColorImage(PXCImage* colorFrame) 167 { 168 if (colorFrame == 0) { 169 return; 170 } 171 172 // データを取得する 173 PXCImage::ImageData data; 174 pxcStatus sts = colorFrame->AcquireAccess( 175 PXCImage::Access::ACCESS_READ, 176 PXCImage::PixelFormat::PIXEL_FORMAT_RGB32, &data); 177 if (sts < PXC_STATUS_NO_ERROR) { 178 throw std::runtime_error("カラー画像の取得に失敗"); 179 } 180 181 // データをコピーする 182 PXCImage::ImageInfo info = colorFrame->QueryInfo(); 183 184 colorImage = cv::Mat(info.height, info.width, CV_8UC4); 185 memcpy(colorImage.data, data.planes[0], data.pitches[0] * info.height); 186 187 // データを解放する 188 colorFrame->ReleaseAccess(&data); 189 190 //描画 191 drawImage(pictureBox1, colorImage); 192 } 193 194 //描画 195 private: System::Void drawImage(PictureBox^ pic, cv::Mat mat) { 196 if ((pic->Image == nullptr) || (pic->Width != mat.cols) 197 || (pic->Height != mat.rows)) { 198 pic->Width = mat.cols; 199 pic->Height = mat.rows; 200 Bitmap^ bmpPicBox = gcnew Bitmap(pic->Width, pic->Height); 201 pic->Image = bmpPicBox; 202 } 203 Graphics^g = Graphics::FromImage(pic->Image); 204 Bitmap^ bmp = gcnew Bitmap(mat.cols, mat.rows, mat.step, 205 System::Drawing::Imaging::PixelFormat::Format32bppRgb, IntPtr(mat.data)); 206 g->DrawImage(bmp, 0, 0, mat.cols, mat.rows); 207 pic->Refresh(); 208 delete g; 209 } 210 }; 211}

試したこと

opencv,realsensesdkのインクルードファイルやライブラリーの設定及び環境変数の追加など問題なくできています。
またコンソールアプリケーションでは同じような設定で動作が確認できました。

補足情報(FW/ツールのバージョンなど)

Visual Studio Community 2015
Windows 10
opencv 3.4.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

winmm.libおよびd3d9.libEvr.libをリンカタブの追加のライブラリに追加してください

投稿2019/03/24 07:04

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hsgru3

2019/03/24 09:19

回答ありがとうございます! 教えていただいた通りwinmm.libおよびd3d9.lib・Evr.libを追加のライブラリに追加したところエラーの数は減りましたが以下のエラーが発生しました。 、、、 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2019 未解決の外部シンボル _MFCopyImage@24 が関数 "public: bool __thiscall UtilRenderD3D::RenderFrame(class Intel::RealSense::Image *)" (?RenderFrame@UtilRenderD3D@@QAE_NPAVImage@RealSense@Intel@@@Z) で参照されました。 USPver3 C:\Users\aselab\Documents\Visual Studio 2015\Projects\USPver3\USPver3\libpxcutils_d.lib(util_render_D3D.obj) 1 、、、 何か解決策などあれば教えていただきたいです。
hsgru3

2019/03/24 10:23

何度もすみません。 libpxcutil_d.lib及びlibpxcutilsmd_d.libをプロジェクトのヘッダーファイルやcppファイルと同じところに置くとエラーがなくなりプログラムが実行されました。 しかし、ウィンドウは表示されるもののpictureboxに映像が表示されないといった問題が起こっています。 何か解決策などがありましたらおしえていただきたいです。 よろしくお願いいたします。
asm

2019/03/24 12:25

んー よく分かりません。 デバッガでブレーク挟んで想定通りに動いているのかを調べていくしかなさそうですね
hsgru3

2019/03/25 04:47

返信ありがとうございます! とりあえずエラーはなくなったのでいろいろ試してみてわからなかったらまた別の質問として投稿しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問