0

我正在尝试向我的.NET 项目中添加对来自army.mil 文件corpscon_v6.dll 的引用。

添加文件时,它指出:'corpscon_v6.dll 无法添加。请确保该文件是可访问的,并且它是一个有效的程序集或 COM 组件。接下来,我运行 Dependency Walker,发现 DLL 内部有两个问题:找不到 IESHIMS.DLL 和 WER.DLL。我已经搜索了这些 DLL,似乎不需要它们。我也害怕从其他站点下载任何类型的 DLL,因为我无法信任它们,而且许多站点都说不要这样做。

接下来,我运行 tlbimp.exe 来转换 DLL,但这也不起作用。这会返回一个错误:输入文件 'c:\temp\corpscon_v6.dll' 不是有效的类型库。我也尝试过对其进行 regsvr32 操作,但这会返回“未找到入口点错误”。考虑到我花在处理完全损坏的陆军兵团网站上的时间,我完全不知道如何让他们宏伟的 CORPSCON DLL 在我的项目中工作/

4

1 回答 1

0

希望这可以帮助。在检索答案之前,这一切都对我有用。或许你能弄清楚这位老人对 C 的东西有什么不知道的地方。祝你好运

导入 System.Runtime.InteropServices

模块模块1

<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="SetInSystem", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function SetInSystem(ByVal InValue As Integer) As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function


<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="SetInDatum", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function setindatum(ByVal InValue As Int16) As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function
<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="SetOutDatum", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function SetOutDatum(ByVal InValue As Int32) As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function

<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="SetOutSystem", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function SetOutSystem(ByVal InValue As Int32) As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function



<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="Corpscon_initialize", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function Corpscon_initialize() As Double
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function


<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="GetXOut", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function GetXOut() As Double
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function


<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="SetOutZone", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function SetOutZone(ByVal InValue As Int32) As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function

<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="SetXIn", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function SetXIn(ByVal InValue As Double) As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function


<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="SetYIn", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function SetYIn(ByVal InValue As Double) As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function

<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="corpscon_initialize_convert", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function corpscon_initialize_convert() As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function

<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="SetOutUnits", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function SetOutUnits(ByVal InValue As Int32) As Integer
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function

<DllImport("c:\Develop\CorpsCon\corpscon_v6.dll", EntryPoint:="GetYOut", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
Public Function GetYOut() As Double
    ' Leave function empty - DllImport attribute forces calls   
    ' to Corpsconconfig to be forwarded to MoveFileW in KERNEL32.DLL.  
End Function



Public Sub convertDegreestoMeters(ByVal inx As Double, ByVal iny As Double, ByRef outx As Double, ByRef outy As Double)
    Dim RetVal As Integer

    RetVal = SetInSystem(1)
    RetVal = setindatum(1983)
    RetVal = SetOutSystem(2)
    RetVal = SetOutDatum(1983)
    RetVal = setoutzone(2301)
    RetVal = setoutUnits(3)  '1=US Servey Foot, 2=International Foor,3=Meters

    RetVal = corpscon_initialize_convert()

    RetVal = SetYIn(iny)
    RetVal = SetXIn(inx)
    Dim script As String

    RetVal = corpscon_initialize_convert()

    Dim outdbl As Double
    outdbl = GetXOut()
    script = "<script language=JavaScript>window.alert('" & outdbl & "'); </script>"
    'ClientScript.RegisterStartupScript(Me.GetType, "tab3", script)  
    outx = outdbl

    outdbl = GetYOut()
    script = "<script language=JavaScript>window.alert('" & outdbl & "'); </script>"
    'ClientScript.RegisterStartupScript(Me.GetType, "tab4", script)  
    outy = outdbl

End Sub

Sub Main()
    Dim outx As Double = 0
    Dim outy As Double = 0
    Call convertDegreestoMeters(CDbl(88.5555), CDbl(27.5555), outx, outy)
    'Results SHOULD BE Outx=
End Sub

端模块

于 2017-06-17T19:32:32.033 回答