none
System::Guidから_GUIDに変換 RRS feed

  • 質問

  • こんにちは。

    C++/CLIのクラスライブラリ(DLL)を作っています。
    その中でGUIDを使う必要があり、「方法: System::Guid と _GUID の間で変換を行う」を参考にして組み込んでみました。

    error LNK2022: メタデータの操作に失敗しました : カスタム属性が適合しません

    というエラーがずらりと出るようになってしまいました。関数単体でもダメだした。

    #include <windows.h>
    #include <stdio.h>

    を外したところ、今度は

    error C2027: 認識できない型 '_GUID' が使われています。

    というエラーが出るようになってしまいました。
    _GUIDを使うにはどのようにすればよろしいのでしょうか ?



    2016年3月18日 5:04

回答

  • 私の環境(VS2013)でプロジェクトを作成していましたが、

    error LNK2022: メタデータの操作に失敗しました : カスタム属性が適合しません

    というようなエラーは表示されませんでした。

    http://work.vc/ClassLibrary2.zip

    にアップロードしています。

    下記のインクルード

    #include <windows.h>
    #include <stdio.h>

    Stdafx.h内に記述しても同様でしょうか?

    また、プロジェクトの設定や他のソース部分の影響でエラーが発生している可能性もあります。

    新規作成でも同様のエラーが発生しますでしょうか?

    2016年3月18日 5:31

すべての返信

  • じつはSystem::Guid構造体は_GUIDと互換があります。ですので単純にキャストできます。

    System::Guid g1;
    _GUID g2 = *reinterpret_cast<const _GUID*>(&g1);

    _GUID型を認識するために #include <Windows.h> は必須です。LNK2022は別原因と思われます。

    2016年3月18日 5:31
  • 私の環境(VS2013)でプロジェクトを作成していましたが、

    error LNK2022: メタデータの操作に失敗しました : カスタム属性が適合しません

    というようなエラーは表示されませんでした。

    http://work.vc/ClassLibrary2.zip

    にアップロードしています。

    下記のインクルード

    #include <windows.h>
    #include <stdio.h>

    Stdafx.h内に記述しても同様でしょうか?

    また、プロジェクトの設定や他のソース部分の影響でエラーが発生している可能性もあります。

    新規作成でも同様のエラーが発生しますでしょうか?

    2016年3月18日 5:31
  • 早々のレスをありがとうございます。

    互換性があるのは知りませんでした。

    とても参考になります。

    2016年3月18日 7:52
  • 早々のレスをありがとうございます。

    確かにご指摘の方法だとエラーは発生しませんでした。

    原因はプロジェクトのつくりだと思います。

    もう一度ゼロから組み立ててみて、ステップを追ってみたいと思います。

    2016年3月18日 7:55