VS2005 にプロジェクトがあります - C++ ATL 属性付き COM - VS2013 に移行しようとしています
error MIDL2025: syntax error : expecting a type specification near "MyStruct"
- プロジェクトをコンパイルするために私が見つけた唯一のオプションは、インターフェイス内の構造体にtypdefを追加することです。これにより、プロジェクトはコンパイルされますが、構造体の再定義のために依存プロジェクトは失敗します。
- 依存プロジェクト C# では、次のようになります
'MyStruct' is a 'type'
が、これは特定のコンテキストでは有効ではありません」
完全なソリューションをアップロードできる場所はありますか? (だから誰でも試すことができます)
お知らせ下さい
最初のプロジェクト COM C++ の IDL
import "oaidl.idl";
import "ocidl.idl";
[uuid("71C7F1BB-699B-4594-A2C0-88454F54C36A")]
struct MyStruct
{
int X;
int Y;
};
[
uuid(CDEAA294-A77B-4703-A45A-C0001F126251),
version(1.0),
helpstring(" Cfc2_DataDictionary 1.0 Type Library")
]
library Cfc2_DataDictionary
{
struct MyStruct;
importlib("stdole2.tlb");
};
ATL 属性付き COM C++ エラーのあるインターフェイス
[オブジェクト、uuid("15C5841B-4811-49F9-8961-C02240A6E0CF")、デュアル、helpstring("IITransformMatrix インターフェイス")、pointer_default(一意) ]
__interface IITransformMatrix : IDispatch
{
//remark next line to get error MIDL 2025
typedef struct MyStruct MyStruct;
[helpstring("method Init")]
HRESULT PutInverseMatrix([in] const MyStruct * matrix);
HRESULT GetMatrix([out, retval] MyStruct* matrix);
};
上記の両方のプロジェクトに依存する C# プロジェクト
using System.Runtime.InteropServices;
using Cfc2_DataDictionary;
using RnA_Utils;
namespace Job.NET
{
public class WaferGeometry
{
public WaferGeometry(IITransformMatrix stmatrix)
{
myWaferGeometry = stmatrix;
stmatrix.PutInverseMatrix(MyStruct);
}
private readonly IITransformMatrix myWaferGeometry;
}
}