- PR -

C++のマネージ拡張について

投稿者投稿内容
Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 2005-07-14 00:22
またまた質問します。

VC++のMFCクラスからManaged C++クラスを使用したいのです。
以下のコードを書いたのですがビルドが通りません。
(通らない箇所に*を付けてあります)
どなたかご伝授下さい。

[Managed C++]
ファイル名:Managed.h
__gc class CManagedClass
{
public:
CManagedClass();
~CManagedClass();

public:
void Test();
};

[UnManaged C++]
ファイル名:UnManaged.cpp

#include "./Managed.h"

CUnManagedClass::CallManagedCode(void)
{
*CManagedClass* pObj = new CManagedClass;
if (pObj)
{
pObj->Test();
}
};
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-14 05:27
*CManagedClass* pObj = new CManagedClass();

そういう問題ではなく?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-07-14 07:28
ビルドが通らないなら、発生しているビルドエラーの内容ぐらい書く!
Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 2005-07-14 07:34
すみません。
会社で投稿する時間がなかったので家で投稿したためエラーコードが分かりませんでした。

CManagedClass* pObj = new CManagedClass;
でも
CManagedClass* pObj = new CManagedClass();
と書いても

コンパイラ エラー C3828
'object type' : マネージ クラスのインスタンスを作成時に配置引数を使用することはできません。
のエラーになります。


渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-07-14 11:14
引用:

コンパイラ エラー C3828
'object type' : マネージ クラスのインスタンスを作成時に配置引数を使用することはできません。
のエラーになります。



エラーメッセージの通りです。

「C++」では、メンバ変数の宣言と初期化を一気に記述することは出来ません。
メンバ変数の初期化はクラスのコンストラクタか、コンストラクタの初期化リストで行いましょう。


_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://www.hidori.jp/
// Microsoft MVP for Visual C#

[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2005-07-14 11:15 ]
Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 2005-07-14 11:37
レスどうもありがとうございます。

引用:

渋木宏明(ひどり)さんの書き込み (2005-07-14 11:14) より:
引用:

コンパイラ エラー C3828
'object type' : マネージ クラスのインスタンスを作成時に配置引数を使用することはできません。
のエラーになります。



エラーメッセージの通りです。

「C++」では、メンバ変数の宣言と初期化を一気に記述することは出来ません。
メンバ変数の初期化はクラスのコンストラクタか、コンストラクタの初期化リストで行いましょう。


_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://www.hidori.jp/
// Microsoft MVP for Visual C#

[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2005-07-14 11:15 ]



次のようにメッセージハンドラで行っても同じです。
#include "stdafx.h"
#include "TestME.h"
#include "TestMEDlg.h"

#include ".\managedclass.h"

(--中略--)

void CTestMEDlg:nBnClickedButtonManaged()
{
CManagedClass* pObj = new CManagedClass;
}
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-07-14 12:02
引用:

次のようにメッセージハンドラで行っても同じです。



本当に「同じ」ですか?
「違う」エラーメッセージが表示出ていませんか?

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 2005-07-14 12:24
渋木さん 何度もすみません。

引用:

渋木宏明(ひどり)さんの書き込み (2005-07-14 12:02) より:
引用:

次のようにメッセージハンドラで行っても同じです。



本当に「同じ」ですか?
「違う」エラーメッセージが表示出ていませんか?





CManagedClass* pObj = new CManagedClass();
でも
CManagedClass* pObj = new CManagedClass;
でも同じエラーコードになります。

スキルアップ/キャリアアップ(JOB@IT)