• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC6でDLL(COM+)作成中にエラーが出ました。)

VC6でDLL(COM+)作成中にエラーが出ました。

このQ&Aのポイント
  • VC6でATL COM AppWizardでDLLを作成しています。インターフェースメソッドを追加したところ、(1)の場合はうまくいきましたが、(2)の場合は、エラーと警告が2つ出ました。理屈がわかっていないので対処方法がわからないのですが、何が原因なのでしょうか?やりたいことは、戻り値1つでなく、3つの戻り値が必要で、引数4つのうち、最初は関数へ計算の元となる文字列を送り、残りの3つはint型ポインタを与えて、関数内で結果をセットし、呼び出し元でも使えるようにしたいので、このようにしました。通常のC?ではうまくいっていました。あと読んだ方が良い書籍も探しています。COM+?について詳しい方、教えてください。※COM+というのはVB2005やC#でも健在なのでしょうか?
  • 戻り値のタイプ: HRESULTメソッド名: Test1パラメータ: なし
  • 戻り値のタイプ: HRESULTメソッド名: Test2パラメータ: [in] char* a, [in,out] int* b, [in,out] int* c, [in,out] int* d →※ここが間違い?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

文字列を渡す場合 BSTRとかを使うんじゃないでしょうか メソッドを作成する際の引数を [in] BSTR a, [in,out] int *b, [in,out] int *c, [in,out] int *d とった具合にしてみてください

tobasu
質問者

お礼

早速のご回答ありがとうございます。 コンパイルは通りました。 ここで気づいたのですが、VBからこの関数?を読んだ場合にint*には型が合いません。VBでは a(10) as longとしているのですが、これを渡すには、VC側でどのような型にしたら良いのでしょうか? 昔DLLでユーザー定義型を渡していた記憶があるのですがATLでもそのような型はあるのでしょうか? ** VB ** type KATA a(10) as long b as long end type ** VC(ATL) ** struct KATA{ long a[10]; long b; };

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

構造体(UDT)専用の型式は無いようです … 探しきれていないのかも CとBasicで配列の要素数が宣言により違う事を認識しておいたほうが良いでしょう 構造体に含まれる配列が1次元ならATL側では intやポインタで受けて型キャストでいいように思います 2次元以上とか文字列がからむなら SafeArray関連で処理するようになるのかもしれません

関連するQ&A