VS2012,VB.NET别人做的示例,为什么这种工程框架这么奇怪?请人指点?

ruan1978 2019-02-18 12:59:21
在公司里,现在需要用到第三方的接口,是dll文件方式提供,我按照对方提供的手册也能调用,就是某个接口里的方法使用时没有达到预期效果,手册很简单,对方做了个demo,我打开是这样的。
1.解决方案文件截图

2.代码中有命名空间出现,我打开属性看到

3.代码中命名空间

4.引用的接口dll也引用了

5.查看资源vb程序里的代码如下

6.修改命名空间,出错


我知道出现这个所有接口里的类名都跟命名空间有关,为什么VB.NET建立一般窗体工程不会出现命名空间,这个难道是手工创建吗?
...全文
847 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruan1978 2019-02-22
  • 打赏
  • 举报
回复
引用 25 楼 一树梅 的回复:
[quote=引用 22 楼 ruan1978 的回复:] 今天如果您方便,能否远程给你看看,您就知道了。问题是,第三方发来的demo我这几个属性不初始化也可以modelData.SetNodes(nodes)正常调用这个语句,但是我自己建立一个工程,就出错了??????????
我也很好奇。楼主中午1点左右方便的话加个QQ,远程看一下。QQ:342103230[/quote] 你的qq验证需要输入手机号,你告诉我下。或者我一点钟加你。
ruan1978 2019-02-22
  • 打赏
  • 举报
回复
引用 25 楼 一树梅 的回复:
[quote=引用 22 楼 ruan1978 的回复:] 今天如果您方便,能否远程给你看看,您就知道了。问题是,第三方发来的demo我这几个属性不初始化也可以modelData.SetNodes(nodes)正常调用这个语句,但是我自己建立一个工程,就出错了??????????
我也很好奇。楼主中午1点左右方便的话加个QQ,远程看一下。QQ:342103230[/quote] 我现在加你,我qq:837573389
yishumei 2019-02-22
  • 打赏
  • 举报
回复
引用 22 楼 ruan1978 的回复:
今天如果您方便,能否远程给你看看,您就知道了。问题是,第三方发来的demo我这几个属性不初始化也可以modelData.SetNodes(nodes)正常调用这个语句,但是我自己建立一个工程,就出错了??????????
我也很好奇。楼主中午1点左右方便的话加个QQ,远程看一下。QQ:342103230
ruan1978 2019-02-22
  • 打赏
  • 举报
回复
引用 17 楼 一树梅 的回复:
[quote=引用 16 楼 ruan1978 的回复:] [quote=引用 14 楼 一树梅 的回复:] 楼主,dll应该是JAVA开发的,可能和.NET存在匹配问题。您查一下第三方提供的demo里的引用有哪些,包括引用文件里的dll和代码里的Imports。
我想单独和你交流下,不知道您是否有时间?我全部看过了,就引用了RFEM5.dll这个动态文件,在发过来的工程文件里,其他看不出有其他。我把工程发给您,您一看可能就知道了。[/quote] 如果方便的话,楼主可以把第三方demo工程打包发到我邮箱里fengzhliu@163.com。[/quote] 他们提供的工程里的代码,如下图,能够正常运行。 我自己建立的工程,如下图,运行就出错。
ruan1978 2019-02-22
  • 打赏
  • 举报
回复
引用 21 楼 一树梅 的回复:
[quote=引用 20 楼 ruan1978 的回复:] 您帮我看了吗?期待您的建议。
楼主,dll确实是VS平台编写的。不过有些参数我电脑里没有,调试不到modelData.SetNodes(nodes)就报错了。 另,第三方的demo您运行过吗?我怀疑报错是因为nodes没被初始化的参数没有缺省值。除了No、X、Y、Z,楼主可以把其他的参数也初始化了,如.Type = NodeType.NodeOnLine、.IsValid = True、.CS = CoordinateSystemType.UnknownCoordinateSystem等等。[/quote] 我自己新建一个工程,引用了dll接口文件,对于nodes这个对象,不用数组方式调用是可以的,Dim node1 As Node node1.No = 1 node1.X = 0 node1.Y = 0 node1.Z = 0 实际调用就用modelData.SetNode(nodes),这样是可以的,但是不用数组效率很低,因为在做的项目里,nodes有几千个,定义这么多个单独变量,管理麻烦,赋值麻烦。所以想定义数组方式,可以提高初始化和赋值的效率。
ruan1978 2019-02-22
  • 打赏
  • 举报
回复
引用 21 楼 一树梅 的回复:
[quote=引用 20 楼 ruan1978 的回复:] 您帮我看了吗?期待您的建议。
楼主,dll确实是VS平台编写的。不过有些参数我电脑里没有,调试不到modelData.SetNodes(nodes)就报错了。 另,第三方的demo您运行过吗?我怀疑报错是因为nodes没被初始化的参数没有缺省值。除了No、X、Y、Z,楼主可以把其他的参数也初始化了,如.Type = NodeType.NodeOnLine、.IsValid = True、.CS = CoordinateSystemType.UnknownCoordinateSystem等等。[/quote] 今天如果您方便,能否远程给你看看,您就知道了。问题是,第三方发来的demo我这几个属性不初始化也可以modelData.SetNodes(nodes)正常调用这个语句,但是我自己建立一个工程,就出错了??????????
yishumei 2019-02-21
  • 打赏
  • 举报
回复
引用 20 楼 ruan1978 的回复:
您帮我看了吗?期待您的建议。
楼主,dll确实是VS平台编写的。不过有些参数我电脑里没有,调试不到modelData.SetNodes(nodes)就报错了。 另,第三方的demo您运行过吗?我怀疑报错是因为nodes没被初始化的参数没有缺省值。除了No、X、Y、Z,楼主可以把其他的参数也初始化了,如.Type = NodeType.NodeOnLine、.IsValid = True、.CS = CoordinateSystemType.UnknownCoordinateSystem等等。
ruan1978 2019-02-21
  • 打赏
  • 举报
回复
引用 17 楼 一树梅 的回复:
[quote=引用 16 楼 ruan1978 的回复:] [quote=引用 14 楼 一树梅 的回复:] 楼主,dll应该是JAVA开发的,可能和.NET存在匹配问题。您查一下第三方提供的demo里的引用有哪些,包括引用文件里的dll和代码里的Imports。
我想单独和你交流下,不知道您是否有时间?我全部看过了,就引用了RFEM5.dll这个动态文件,在发过来的工程文件里,其他看不出有其他。我把工程发给您,您一看可能就知道了。[/quote] 如果方便的话,楼主可以把第三方demo工程打包发到我邮箱里fengzhliu@163.com。[/quote] 发到您邮箱了,我的邮箱地址:bungeejiang@163.com
yishumei 2019-02-21
  • 打赏
  • 举报
回复
引用 16 楼 ruan1978 的回复:
[quote=引用 14 楼 一树梅 的回复:] 楼主,dll应该是JAVA开发的,可能和.NET存在匹配问题。您查一下第三方提供的demo里的引用有哪些,包括引用文件里的dll和代码里的Imports。
我想单独和你交流下,不知道您是否有时间?我全部看过了,就引用了RFEM5.dll这个动态文件,在发过来的工程文件里,其他看不出有其他。我把工程发给您,您一看可能就知道了。[/quote] 如果方便的话,楼主可以把第三方demo工程打包发到我邮箱里fengzhliu@163.com。
ruan1978 2019-02-21
  • 打赏
  • 举报
回复
引用 14 楼 一树梅 的回复:
楼主,dll应该是JAVA开发的,可能和.NET存在匹配问题。您查一下第三方提供的demo里的引用有哪些,包括引用文件里的dll和代码里的Imports。
我想单独和你交流下,不知道您是否有时间?我全部看过了,就引用了RFEM5.dll这个动态文件,在发过来的工程文件里,其他看不出有其他。我把工程发给您,您一看可能就知道了。
ruan1978 2019-02-21
  • 打赏
  • 举报
回复
引用 13 楼 luj_1768 的回复:
从名称分析,这可能是一个商业封装的软件,可能是用其他语言开发的,是按嵌入式系统规范设计的。具体问题,欢迎进一步交流。
您有联系方式吗?qq或者邮箱,想单独问问您。我的qq:837573389
yishumei 2019-02-21
  • 打赏
  • 举报
回复
楼主,dll应该是JAVA开发的,可能和.NET存在匹配问题。您查一下第三方提供的demo里的引用有哪些,包括引用文件里的dll和代码里的Imports。
ruan1978 2019-02-21
  • 打赏
  • 举报
回复
引用 19 楼 一树梅 的回复:
楼主,我公司电脑上没有安装VS2012,等晚上回去帮您看看吧。
您帮我看了吗?期待您的建议。
luj_1768 2019-02-21
  • 打赏
  • 举报
回复
从名称分析,这可能是一个商业封装的软件,可能是用其他语言开发的,是按嵌入式系统规范设计的。具体问题,欢迎进一步交流。
yishumei 2019-02-21
  • 打赏
  • 举报
回复
楼主,我公司电脑上没有安装VS2012,等晚上回去帮您看看吧。
ruan1978 2019-02-20
  • 打赏
  • 举报
回复
引用 7 楼 一树梅 的回复:
1. 建一个自己的工程 2. 引用dll文件Dlubal.RFEM5 3. 双击dll文件弹出对象浏览器,查看dll文件Dlubal.RFEM5的命名空间Namespace;假设该dll中存在命名空间Dlubal.Data 4. 打开工程代码,在Class xx 上面加入Imports Dlubal.Data,之后就可以操作dll文件中的公共变量、结构体、函数等资源了 自己建立的工程如果想生成dll文件的话,需要改变属性里的“应用程序类型”项;代码也得有相应的改变,否则可能后生成失败。vs2005改成“类库”,vs2012不清楚是不是还叫“类库”。
您有qq吗?想单独和您交流下?我按照您说的方式建立工程没问题,也能调用第三方接口,但是里面数组一使用,就出错,其他都是没问题的。
ruan1978 2019-02-20
  • 打赏
  • 举报
回复
引用 7 楼 一树梅 的回复:
1. 建一个自己的工程 2. 引用dll文件Dlubal.RFEM5 3. 双击dll文件弹出对象浏览器,查看dll文件Dlubal.RFEM5的命名空间Namespace;假设该dll中存在命名空间Dlubal.Data 4. 打开工程代码,在Class xx 上面加入Imports Dlubal.Data,之后就可以操作dll文件中的公共变量、结构体、函数等资源了 自己建立的工程如果想生成dll文件的话,需要改变属性里的“应用程序类型”项;代码也得有相应的改变,否则可能后生成失败。vs2005改成“类库”,vs2012不清楚是不是还叫“类库”。
在他们发的工程里,我能用数组,他们的代码如下: Private Sub BtnRunRFEM_Click(ByVal sender As Object, ByVal e As EventArgs) Dim application As IApplication = Nothing Dim model As IModel = Nothing Dim view As IView = Nothing Try ' Creates New RFEM5 instance And gets it's interface. application = New Global.Dlubal.RFEM5.Application() 'Shows RFEM GUI. application.Show() ' Creates a new model and gets it's interface. model = application.CreateModel("MyTestModel") SetStructuralData(model) Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error]) Finally labelInfo.Text = "Ready" ' View All view = model.GetActiveView() view.ShowAll() view = Nothing ' Releases RFEM model interface. model = Nothing ' Unlocks licence And releases RFEM application interface. If application IsNot Nothing Then application.UnlockLicense() application = Nothing End If ' Cleans Garbage Collector and releases all cached COM interfaces and objects. System.GC.Collect() System.GC.WaitForPendingFinalizers() End Try End Sub Private Sub SetStructuralData(ByVal model As IModel) ' Gets model data interface. Dim modelData As IModelData = model.GetModelData() ' Allocates array of 4 nodes and sets theirs parameters. Dim nodes() As Node = New Node(7) {} nodes(0).No = 1 nodes(0).X = 0 nodes(0).Y = 0 nodes(0).Z = 0 nodes(1).No = 2 nodes(1).X = 8 nodes(1).Y = 0 nodes(1).Z = 0 nodes(2).No = 3 nodes(2).X = 18 nodes(2).Y = 0 nodes(2).Z = 0 nodes(3).No = 4 nodes(3).X = 26 nodes(3).Y = 0 nodes(3).Z = 0 nodes(4).No = 5 nodes(4).X = 0 nodes(4).Y = 6 nodes(4).Z = 0 nodes(5).No = 6 nodes(5).X = 8 nodes(5).Y = 6 nodes(5).Z = 0 nodes(6).No = 7 nodes(6).X = 18 nodes(6).Y = 6 nodes(6).Z = 0 nodes(7).No = 8 nodes(7).X = 26 nodes(7).Y = 6 nodes(7).Z = 0 ' Allocates material variable and sets it's parameters. Dim material() As Material = New Material(0) {} material(0).No = 1 material(0).Description = "Beton C50/60 | DIN EN 1992-1-1/NA:2011-01" ' Allocates array of 3 lines for 3 members Dim lines() As Line = New Line(9) {} lines(0).No = 1 lines(0).NodeList = "1,2" lines(0).Type = LineType.PolylineType lines(1).No = 2 lines(1).NodeList = "2,3" lines(1).Type = LineType.PolylineType lines(2).No = 3 lines(2).NodeList = "3,4" lines(2).Type = LineType.PolylineType lines(3).No = 4 lines(3).NodeList = "5,6" lines(3).Type = LineType.PolylineType lines(4).No = 5 lines(4).NodeList = "6,7" lines(4).Type = LineType.PolylineType lines(5).No = 6 lines(5).NodeList = "7,8" lines(5).Type = LineType.PolylineType lines(6).No = 7 lines(6).NodeList = "1,5" lines(6).Type = LineType.PolylineType lines(7).No = 8 lines(7).NodeList = "2,6" lines(7).Type = LineType.PolylineType lines(8).No = 9 lines(8).NodeList = "3,7" lines(8).Type = LineType.PolylineType lines(9).No = 10 lines(9).NodeList = "4,8" lines(9).Type = LineType.PolylineType Dim tn As New SurfaceThickness With tn .Constant = 0.2 End With Dim flaches() As Surface = New Surface(0) {} flaches(0).No = 1 flaches(0).GeometryType = SurfaceGeometryType.PlaneSurfaceType flaches(0).BoundaryLineList = "1,2,3,10,6,5,4,7" flaches(0).MaterialNo = 1 flaches(0).Thickness = tn ' Allocates array of 2 nodal supports and sets theirs parameters. Dim nodalSupports() As NodalSupport = New NodalSupport(0) {} nodalSupports(0).No = 1 nodalSupports(0).NodeList = "1-10" nodalSupports(0).SupportConstantX = -1 nodalSupports(0).SupportConstantY = -1 nodalSupports(0).SupportConstantZ = -1 nodalSupports(0).RestraintConstantX = 0 nodalSupports(0).RestraintConstantY = 0 nodalSupports(0).RestraintConstantZ = -1 ' Writes all objects to the model. modelData.PrepareModification() Try modelData.SetNodes(nodes) modelData.SetMaterials(material) modelData.SetLines(lines) modelData.SetSurfaces(flaches) modelData.SetNodalSupports(nodalSupports) Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error]) Finally modelData.FinishModification() End Try End Sub 我自己建立了一个工程,引用了RFEM5,代码如下: Imports Dlubal.RFEM5 Imports System.Runtime.InteropServices Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim application As IApplication = Nothing Dim model As IModel = Nothing Dim view As IView = Nothing Try ' Creates New RFEM5 instance And gets it's interface. application = New Global.Dlubal.RFEM5.Application() 'Shows RFEM GUI. application.Show() ' Creates a new model and gets it's interface. model = application.CreateModel("MyTestModel") SetStructuralData(model) Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error]) Finally ' View All view = model.GetActiveView() view.ShowAll() view = Nothing ' Releases RFEM model interface. model = Nothing ' Unlocks licence And releases RFEM application interface. If application IsNot Nothing Then application.UnlockLicense() application = Nothing End If ' Cleans Garbage Collector and releases all cached COM interfaces and objects. System.GC.Collect() System.GC.WaitForPendingFinalizers() End Try End Sub Private Sub SetStructuralData(ByVal model As IModel) ' Gets model data interface. Dim modelData As IModelData = model.GetModelData() ' Allocates array of 4 nodes and sets theirs parameters. Dim nodes() As Node = New Node(7) {} nodes(0).No = 1 nodes(0).X = 0 ...//相同代码略。 运行后出现如下对话框: 请教你了。
ruan1978 2019-02-20
  • 打赏
  • 举报
回复
引用 7 楼 一树梅 的回复:
1. 建一个自己的工程 2. 引用dll文件Dlubal.RFEM5 3. 双击dll文件弹出对象浏览器,查看dll文件Dlubal.RFEM5的命名空间Namespace;假设该dll中存在命名空间Dlubal.Data 4. 打开工程代码,在Class xx 上面加入Imports Dlubal.Data,之后就可以操作dll文件中的公共变量、结构体、函数等资源了 自己建立的工程如果想生成dll文件的话,需要改变属性里的“应用程序类型”项;代码也得有相应的改变,否则可能后生成失败。vs2005改成“类库”,vs2012不清楚是不是还叫“类库”。
我按照你的意思,双击打开dll,你看看,是这样的文件结构。
yishumei 2019-02-19
  • 打赏
  • 举报
回复
1. 建一个自己的工程 2. 引用dll文件Dlubal.RFEM5 3. 双击dll文件弹出对象浏览器,查看dll文件Dlubal.RFEM5的命名空间Namespace;假设该dll中存在命名空间Dlubal.Data 4. 打开工程代码,在Class xx 上面加入Imports Dlubal.Data,之后就可以操作dll文件中的公共变量、结构体、函数等资源了 自己建立的工程如果想生成dll文件的话,需要改变属性里的“应用程序类型”项;代码也得有相应的改变,否则可能后生成失败。vs2005改成“类库”,vs2012不清楚是不是还叫“类库”。
ruan1978 2019-02-19
  • 打赏
  • 举报
回复
引用 3 楼 一树梅 的回复:
楼主,你自己项目中的根命名空间和demo中的根命名空间要一致啊。
根命名空间如何创建?创建一个类库吗?
加载更多回复(7)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧