1

VS 2010 で Excel 2007 XLL SDK を使用して Excel 2007/2010 XLL を作成しています。関数はさまざまな文字列を返すことができます。

 __declspec(dllexport) LPXLOPER12 WINAPI PTstate (double P, double T)
{
       static XLOPER12 xResult;
       xResult.xltype = xltypeStr;  
       debugPrintf("P = %d\n", P);
       debugPrintf("T = %d\n", T);
       Calculate(P, T);
       Reg = GetRegion(DV.p, DV.t);
       xResult.val.str = L"";
       if (Reg == 0) {xResult.val.str = L"\027Ошибка диапазона параметров";debugPrintf("Reg = 0");}
       if (Reg == 1) {xResult.val.str = L"\004Вода";debugPrintf("Reg = 1");}
       if (Reg == 2) {xResult.val.str = L"\014Перегретый пар";debugPrintf("Reg = 2");}
       if (Reg == 3) {xResult.val.str = L"\017Критическая смесь";debugPrintf("Reg = 3");}
       if (Reg == 4) {xResult.val.str = L"\014Насыщенный пар";debugPrintf("Reg = 4");}
       if (Reg == 5) {xResult.val.str = L"\019Сверхперегретый пар";debugPrintf("Reg = 5");}
    if (Reg != 0) MathVater();
    return(LPXLOPER12) &xResult;
}

文字列値が Excel に返されると、その値は 'Ошибка диапазона параме' で、すべてが最初の文字列ではありません。しかし、文字列の先頭に「\ 027」を付けて、長さ os 文字列を教えています。どこが間違っていますか?

編集1

I've changed code to:
if (Reg == 0) {xResult.val.str = L"\035Ошибка диапазона параметров";debugPrintf("Reg = 0");}
       if (Reg == 1) {xResult.val.str = L"\012Вода";debugPrintf("Reg = 1");}
       if (Reg == 2) {xResult.val.str = L"\022Перегретый пар";debugPrintf("Reg = 2");}
       if (Reg == 3) {xResult.val.str = L"\025Критическая смесь";debugPrintf("Reg = 3");}
       if (Reg == 4) {xResult.val.str = L"\022Насыщенный пар";debugPrintf("Reg = 4");}
       if (Reg == 5) {xResult.val.str = L"\027Сверхперегретый пар";debugPrintf("Reg = 5");}

しかし、私はこれを持っています:

ここに画像の説明を入力 についてどう思いますか?

編集2 :私の関数署名タイプ:

{
              L"PTstate",                 // Function name/ordinal
              L"UBB",                    // Func signature type
              L"PTstate",                 // Func name in Func wizard
              L"P, T",             // Arg name in Func wizard
              L"1",                      // Function type
              L"SimpleXll2007",           // Category in Func wizard
              L"",                       // Shortcut (commands only)
              L"",                       // Help topic
              L"",  // Func help in Func wizard
              L"",          // Arg help in Func wizard
              L""           // Arg help in Func wizard       
       }
4

3 に答える 3

0

文字列を返すために char* を使用しました。XLOPER12 で解決策を見つけた人 - ようこそ!

于 2013-08-19T04:32:13.523 に答える