2009-12-10 37 views
0

我有一個編譯爲非.NET非COM COM DLL的第三方C應用程序。它宣稱,像這樣一個簡單的函數:編譯C DLL無法設置從ASP.NET應用程序調用時的指針

Declare Function CapiTaxRoutine Lib "taxcommono.dll" (ByVal sInData As String, ByVal OutputData As String, ByVal intINPutLength As Long) As Integer 

如果我放在taxcommono.dll在我的路徑(C:\ Windows \ System32下是我使用的是什麼,因爲它的供應商建議的是什麼),我可以線調用函數,它工作得很好。它爲成功/失敗返回1或0,但它還將OutputData字符串參數(使用一些我不熟悉的C指針魔術)的值設置爲具有所需數據的巨大固定寬度格式返回記錄。當我從.NET .exe應用程序調用它時,它工作得很好。當我嘗試通過引用的編譯的.NET包裝DLL從ASP.NET應用程序調用它時,它將運行但不能設置該字符串。爲了讓它運行,我不能在我的路徑中使用taxcommono.dll,而是必須將它放在Web項目的Bin目錄中。 有沒有人知道它可以設置從一個.exe應用程序調用時,但不是從Web應用程序調用時的指針的原因?
我使用的.NET封裝器DLL在我們的ERP軟件中調用時並不是基於Web的。但是,當我在Web應用程序中添加對同一個DLL的引用時,它不會給我那個輸出值。我很難過。這並沒有幫助,我從來沒有真正使用過C指針,並習慣於獲取返回值而不是函數來設置我的輸入參數之一的值。我覺得很奇怪。

回答

0

所以不確定爲什麼它不能從引用的DLL中工作,但是當我在GAC中安裝封裝器DLL時,它對我很有用。從ERP軟件中調用它的方式也是一樣的。 一個巨大的警告是,如果你運行的是64位窗口,並且封裝引用的非.NET,非COM DLL是32位,它需要存在於Windows \ SysWOW64中,而不是Windows \ System32中。非常直觀。這比我的主要問題花費更多的時間。