0

Windows 10 コンピューターで、PowerShell スクリプトを使用して 4th Dimension (4D) データベースから QuickBooks を呼び出しています。スクリプトはQBXMLRP2.dll、32 ビット COM オブジェクトである を呼び出して、QuickBooks 2019 と通信します。私が理解しているように、64 ビット バージョンの PowerShell を使用して 32 ビット dll を呼び出すと失敗し、その逆も同様です。ただし、4D の 32 ビット バージョンと 64 ビット バージョンのどちらを使用するかによって、異なる結果が得られます。これは私には意味がありません。ここに私のテスト結果があります:

OS  4D  PowerShell  DLL   Result
64  32  32          32    OK
64  32  64          32    OK //According to my research this should not work!

64  64  32          32    OK
64  64  64          32     X //According to my research this is the expected behavior

64 ビット バージョンの PowerShell/32 ビット dll が 32 ビット バージョンの 4D で動作する理由について何か考えはありますか? 私が本当に望んでいるのは、4D と PowerShell の 64 ビット バージョンで動作することです。

質問に答えて... これが私がやっていることです。4D はまず.ps1スクリプト ファイルを作成してディスクに保存し、次に外部プロセスで PowerShell を起動します。たとえば、これは 64 ビット PowerShell (Windows 10) を起動し、PowerShell は以前に保存したスクリプトを実行します。

"C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -file \""+$ScriptPath+"\""

PowerShell スクリプトは次のようになります。

[String]$requestXML = '<?xml version="1.0" ?>
<?qbxml version="2.0"?><QBXML>
<QBXMLMsgsRq onError="stopOnError">
<CompanyQueryRq requestID="1">
</CompanyQueryRq>
</QBXMLMsgsRq>
</QBXML>'
$myQBXMLRP = New-Object -com QBXMLRP2.RequestProcessor
$myQBXMLRP.OpenConnection2("qb4D","CCFolioPro",1)
$ticket = $myQBXMLRP.BeginSession("C:\Company Files\Cadinha & Co.,LLC.QBW",$myQBXMLRP.qbFileOpenDoNotCare)
$myQBXMLRP.ProcessRequest($ticket, $requestXML) > $env:_4D_OPTION_OUTPUT_STREAM
$myQBXMLRP.EndSession($ticket)
$myQBXMLRP.CloseConnection()
"Stop" > $env:_4D_OPTION_STOP_TOKEN

私が理解しているように、PowerShell が起動されると、4D は見えなくなります。4D は dll と対話しません。すべて PowerShell/dll (COM)/QuickBooks です。

4

1 に答える 1