kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

C++/CLIの相互運用と宣言場所

プリンタ関係で定型外用紙を追加する機能をC++/CLIでちょっと作ってみました。P/Invoke書くのがめんどいので、C++/CLIで書いてみるとちょっと謎。仕様を読んでみたつもりなのですが、うーむ…。windows.hはstdafx.hでインクルードしています。

//ヘッダファイル
using namespace System;
using namespace System::Runtime::InteropServices;

namespace CliTest1 
{
  public ref class Class1
  {
      HANDLE hHandle;
    public:
      void Test(String^ name);
  };
}

// cpp
#include "stdafx.h"

#include "CliTest1.h"
namespace CliTest1 
{
  void Class1::Test(String^ name)
  {
    //文字列のマーシャリングは省略しています。lpszNameに入っていると思ってください。
    OpenPrinter(lpszName, &hHandle, nullptr);
  }
}

これだと、OpenPrinter()のところで、このエラー。逆にこのcppソース内でHANDLEを宣言するとOK。こういうものでしたっけ?VS2010でもVS2008SP1でも同じです。

エラー error C2664: 'OpenPrinterW' : 2 番目の引数を 'cli::interior_ptr' から 'LPHANDLE' に変換できません。

それから、C++/CLI使ってみて…デフォルトではほとんどカラーハイライトされない(?)悲しい。