1

これはおそらく簡単な質問ですが、私はすべてを試しましたが、完全に途方に暮れています。

sprintf(&szDevCapEntry[strlen(szDevCapEntry)], ",%s:%0d", (LPCSTR)szAnalogP, szAnalogChannels);

エントリを追加する必要AL:1000がありますが、追加さA:1000れ、理由がわかりません。szAnalogP間違いなくALです。誰でもアイデアはありますか?

編集:私の機能:

extern "C" UINT __stdcall WriteDriverEntry(MSIHANDLE hInstall)
{
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
CString m_DevicePrintName, m_nDeviceNumber, m_DeviceName;
LPWSTR szDevicePrintName= NULL, szDeviceNum = NULL, szValueBuf = NULL, szAnalogP = NULL, szDigitalP = NULL, szAnalogOP = NULL, szDigitalOP = NULL;
LPWSTR szDiagnosticP = NULL, szCounterP;
CHAR    szDevCapEntry[256], szBuffer[MAX_PATH];
int Index, szAnalogChannels, szDigitalChannels, szAnalogOChannels, szDigitalOChannels, szDiagnosticChannels, szCounterChannels;

hr = WcaInitialize(hInstall, "WriteDriverEntry");
ExitOnFailure(hr, "Failed to initialize");

WcaLog(LOGMSG_STANDARD, "Initialized.");

hr = WcaGetProperty(L"COMPORTNUMBER", &szDeviceNum);
ExitOnFailure(hr, "failed to get comport number");
m_nDeviceNumber = szDeviceNum;

hr = WcaGetProperty(L"DEVICEPRINTNAME", &szDevicePrintName);
ExitOnFailure(hr, "failed to get device print name");
m_DevicePrintName = szDevicePrintName;

hr = WcaGetProperty(L"DEVICENAME",&szValueBuf);
ExitOnFailure(hr, "failed to get device name");
m_DeviceName = szValueBuf;

wsprintf(szDevCapEntry, "%s,%s,%s", (LPCSTR)m_DeviceName, m_nDeviceNumber, (LPCSTR)m_DevicePrintName);

hr = WcaGetProperty(L"ANALOGPREFIX",&szAnalogP);
hr = WcaGetIntProperty(L"ANALOGCHANNELS",&szAnalogChannels);

if (szAnalogChannels != 0 )
{
    WcaSetProperty(L"TEST", szAnalogP);
    sprintf(&szDevCapEntry[strlen(szDevCapEntry)], ",%s:%0d", (LPCSTR)szAnalogP, szAnalogChannels);
    WcaLog(LOGMSG_STANDARD,  szDevCapEntry);
}

    if (!UpdateCapEntry(szDevCapEntry))
    return -1;

LExit:

er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(er);
}

%.2s などのさまざまなバリエーションがあるため、2 つの文字が表示されますが、1 つしか表示されません。これが広すぎる質問で申し訳ありませんが、私は初心者であり、これを理解できません。変数をcharに変換するとうまくいくかもしれないと思ったのですが、同じ結果になりました。

4

1 に答える 1

1

あなたが示すコードに問題はありません。

奇妙に見えることの 1 つは、明示的に にキャストszAnalogPする必要があることですLPCSTR。これは、それが他のタイプであることを示唆しています。あなたが解釈しているのは Unicode C 文字列であり、ASCII 文字列であるか、またはそれらの行に沿ったものである可能性があるのだろうか?

于 2013-03-06T14:37:59.380 に答える