外部プログラムから呼び出される C++ DLL を作成しています。
1.) このプログラムから文字列の配列 (char *var として) を引数として取得します。
2.) この配列を繰り返し処理し、文字列配列の各要素に対して COM 関数を呼び出したい。COM 関数は BSTR を受け取る必要があります。
DLL_EXPORT(void) runUnitModel(char *rateMaterialTypeNames) {
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
IUnitModelPtr pIUnit(__uuidof(BlastFurnaceUnitModel));
pIUnit->initialiseUnitModel();
int i;
for(i=0; i < sizeOfPortRatesArray; i++)
pIUnit->createPort(SysAllocString(BSTR((const char *)rateMaterialTypeNames[i])));
問題を引き起こしているのは SysAllocString(BSTR((const char *)rateMaterialTypeNames[i])) ビットだと思います。プログラムの実行時にアクセス違反が発生します。
これは、i で rateMaterialTypeName の値にアクセスする正しい方法ですか? i の値として、単一の文字ではなく、「IronOre」のようなものを期待していることに注意してください。