参数类型,我上一个项目,我需要导入一个DLL文件时创建一个几年前一个VB项目。该DLL是用C++创建的,是这样的:使用DLL导入/中声明VB.NET与不使用.NET
void CoordinateConversionService::convert(SourceOrTarget::Enum sourceDirection, SourceOrTarget::Enum targetDirection, CoordinateTuple* sourceCoordinates, Accuracy* sourceAccuracy, CoordinateTuple& targetCoordinates, Accuracy& targetAccuracy)
我在我的工作实习,而我还没有来却利用这一点,所以我的理解是极其有限的,用我的VB的使用沿着(我是C++/C#的人)。这里有几个问题:
1)看dllimport的,好像参数外的最后部分返回类型。来自其他网站的示例代码:
<DllImport("advapi32.dll")> _
Public Function GetUserName(_
ByVal lpBuffer As StringBuilder, _
ByRef nSize As Integer) As Boolean
是“作为布尔型”的返回类型吗?如果是这样,我尝试使用“Sub”,它说“关键字不会命名一个类型”。因此,我为什么研究声明,因为它似乎可以返回void/sub作为返回类型。
2)尝试使用类型“CoordinateTuple”和“准确性”给我的问题,说他们没有定义。我怎么能解决这个问题,因为我不认为我可以真正定义它们,那么它们是指针呢?另外 - 我不能以任何方式修改C++代码,所以我拥有的就是我所拥有的。
PS - 我尝试添加此作为参考,我得到了说,这是不是一个有效的COM文件中的错误。 – ibarczewski 2010-06-25 13:56:54
我们需要更多关于'SourceOrTarget :: Enum','CoordinateTuple'和'Accuracy'自定义类型的信息。 VB和C#只能处理简单的C函数,没有C++函数(编组的目的是提供简单的访问Windows API),因此,如果这些类型都是非POD类型,您必须编写与任何一个C或C++包装。 NET界面。至少,你必须摆脱C++引用参数并声明函数'extern“C”'。 – Philipp 2010-06-25 15:13:36
你在说C++代码吗?因为我无法以任何方式,形状或形式修改它。 – ibarczewski 2010-06-25 15:33:39