1

これは新しい質問ではありませんが、解決策はうまくいきませんでした。C++ を使用して dicom ファイルを読みたいです。VS 2013 コミュニティ エディションを搭載した 32 ビット Windows PC を使用しています。

この投稿とその中の他の回答では、DCMTK の使用が提案されています。DCMTK をインストールし (CMake に続いて VS を使用)、この投稿で提供されているガイドラインとリンクを使用して VS で使用するように構成しました。次に、簡単なテスト プログラムを作成し、コンパイルしてみました。

#include "stdafx.h"
#include "dcmtk\dcmdata\dctk.h"
#include "dcmtk\config\osconfig.h"
#include "dcmtk\dcmimgle\dcmimage.h"
#include <iostream>
using namespace std;

int main()
{
    DicomImage *image = new DicomImage("test.dcm");
    if (image != NULL)
    {
        if (image->getStatus() == EIS_Normal)
        {
            if (image->isMonochrome())
            {
                image->setMinMaxWindow();
                Uint8 *pixelData = (Uint8 *)(image->getOutputData(8 /* bits */));
                if (pixelData != NULL)
                {
                    /* do something useful with the pixel data */
                }
            }
        }
        else
            cerr << "Error: cannot load DICOM image (" << DicomImage::getString(image->getStatus()) << ")" << endl;
    }
    delete image; 
    return 0;
}

コンパイル時に、次のエラーが発生します。

dcmdata.lib(dcuid.obj) : error LNK2019: unresolved external symbol _Netbios@4 referenced in function "unsigned char * __cdecl getMACAddress(unsigned char * const)" (?getMACAddress@@YAPAEQAE@Z)

このエラーは一般的なようですが、次の解決策はどれもうまくいきません。

  1. FAQ#27およびDCMTK フォーラムの別の投稿: lib ファイルを特定の順序で含めることを提案しています。ファイルを含める順序は次のとおりです(逆の順序も試しましたが、機能しませんでした):

    ここに画像の説明を入力

これはすべて機能しません。実際、どの lib ファイルが含まれているのかわかりません。それをどうやって決めるの?

また、追加のライブラリ ディレクトリの下に「C:\Program Files\DCMTK\lib」を含め、プロジェクト プロパティの追加のインクルード ディレクトリの下に「C:\Program Files\DCMTK\include」を含めました。

  1. stackoverflow での別の同様の質問には回答がありません。コメントは、DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS を無効にして CMake を再実行することを提案しています。DCMTK のヘルプ ページには、自分が何をしているのか本当にわからない限り、これを無効にしないでくださいと書かれているので、私はそれをしませんでした。

誰かが案内してくれますか?

4

5 に答える 5

0

使用している DCMTK のバージョンは不明ですが、現在の開発スナップショットには次の標準ライブラリが必要です (Windows の場合): "ws2_32 netapi32 wsock32"。この情報は、DCMTK の CMake ファイルにあります。ところで、あなたのプロジェクトでは CMake を使用していないようですね。

于 2016-11-23T09:48:14.800 に答える
0

NetBios 関数は NETAPI32.LIB にあるため、NetAPI32.lib (リストにある) をそのリストの一番上に移動してみてください。

于 2016-11-23T09:07:42.913 に答える
0

.lib と vs プラットフォームを確認して、x64 用の同じ lib の場合は、vs プラットフォームが x64 である必要があります。

于 2017-01-08T08:17:50.827 に答える
0

dcmsign.lib のスペルを dcmsig.lib と間違えたと思います。

変更しても問題が解決しない場合は、リンク先のサポート ページに基づいて次の順序をお勧めします。 .lib dcmtls.lib dcmwlm.lib dcmimgle.lib dcmpstat.lib dcmjpls.lib dcmjpeg.lib dcmimage.lib ijg16.lib ijg12.lib ijg8.lib

このリストでは、各ライブラリは、依存するすべてのライブラリの後に来る必要があると思います。

于 2016-11-23T10:02:28.953 に答える