0

私はC ++の初心者で、Excel vbaからアクセスされるC ++でDLLを作成しようとしています.DLLの内部には、文字列を引数として取り、文字列を変更し、最後に変更された文字列がvba。

手順をもう一度:

1.文字列ポインタを引数とする関数を持つdll。

2.vba の空の文字列が関数に渡されます。

3. dll が文字列を変更または操作します。

4.最後に、変更された文字列がvbaで使用されます。

dll 内の関数は次のようになります。

extern "C"_declspec(dllexport) void WINAPI ModifyStr(char* str) { Str = "Hello" } コンパイラによって次のエラーがスローされます。「文字列定数から char* への非推奨の変換」

私は書いて関数を修正しました

_declspec(dllexport) void WINAPI ModifyStr(string** Str) { *Str = new string("hello"); このコードは適切にコンパイルされていますが、vba から関数を呼び出そうとすると、プログラムがクラッシュしました。この問題を解決し、エラーなしで dll をビルドしてください。

4

1 に答える 1

0

MSDNから

VBA文字列は、ByValが渡されるとバイト文字列BSTR構造体へのポインタとして渡され、ByRefが渡されるとポインタへのポインタとして渡されます。

dllでBSTR str = SysAllocString(L"Hello World!");、文字列の割り当てに使用する必要があります。COMメモリ管理は割り当て解除を処理する必要があります。

于 2012-07-12T10:07:34.390 に答える