VB操作VC编写dll的问题

问题描述

这里有一个VC编写的dll文件,需要分别使用C#,和VB来进行调用文件中的数据结构及函数分别为:typedefstructAD_ITEM_FLAG{longADItemSize;longid;longADFlags;charPath[255];longisCut;longVolume;longPosition;longTimes;charContent[1000];longTimeLong;charTextFont[32];longFontSize;longFontColor;longXPosition;longYPosition;longNextADTime;}AD_ITEM;extern"C"long__stdcallget_ADItem(longADType,longADScene,AD_ITEM**pItem);我使用C#来进行调用比较正常,但是使用VB的时候就遇到问题了,VB里面使用的结构是PublicTypeAD_ITEM_FLAGADItemSizeAsLongidAsLongADFlagsAsLongPath(256)AsByteisCutAsLongvolumeAsLongPositionAsLongTimesAsLongContent(1000)AsByteTimeLongAsLongTextFont(32)AsByteFontSizeAsLongFontColorAsLongXPositionAsLongYPositionAsLongNextADTimeAsLongEndType使用的函数是PublicDeclareFunctionget_ADItemLib"ADSystem.dll"(ByValADTypeAsLong,ByValADSceneAsLong,pItem()AsAD_ITEM_FLAG)AsLong因为每次只返回一个结果,所以调用的方法是DimpItem(1)AsAD_ITEM_FLAGText2.text=get_ADItem(1,2,pItem)结果现在每次调用程序就崩溃报告“该内存不能为read”希望哪位兄弟能够帮助小弟!

解决方案

解决方案二:
路过,关注....
解决方案三:
up
解决方案四:
C#使用的方法跟这个类似能够正常运行,这个就不行了
解决方案五:
希望哪位兄弟帮忙
解决方案六:
调用结构体的时候是不是应该传地址byref
解决方案七:
对于自定义类型,VB默认就是byref
解决方案八:
哪位兄弟帮忙解答一下,不胜感激
解决方案九:
改成这样试试:PublicDeclareFunctionget_ADItemLib"ADSystem.dll"(ByValADTypeAsLong,ByValADSceneAsLong,ptrAsIntPtr)AsLongDimItemAsAD_ITEM_FLAGDimresultItemAsAD_ITEM_FLAGDimptrAsIntPtr=Marshal.AllocHGlobal(Marshal.SizeOf(Item))Marshal.StructureToPtr(Item,ptr,False)Text2.text=get_ADItem(1,2,ptr)resultItem=CType(Marshal.PtrToStructure(ptr,GetType(AD_ITEM_FLAG)),AD_ITEM_FLAG)Marshal.FreeHGlobal(ptr)

解决方案十:
小弟第一次用VB6.0,好像只有VB.net里面才有IntPtr以及Marshal这些东西吧,VB6.0里面有没有类似的东西?
解决方案十一:
哪位兄弟帮忙解答一下,不胜感激
解决方案十二:
吧dll的结构设置为public,vb中可以直接使用,不用在定义结构。
解决方案十三:
谢谢楼上的大哥我不是特别明白你的意思,这个dll是厂方提供的只有头文件可以看,头文件具体是//定义一个广告元素的结构体,用于返回值typedefstructAD_ITEM_FLAG{longADItemSize;//这个结构体占的字节数longid;//广告的idlongADFlags;//返回的广告有效字段标记,是AD_TEXT等字段的并集charPath[255];//广告的路径longisCut;//是否允许切换longVolume;//视频的音量longPosition;//广告的位置longTimes;//text的播放次数charContent[1000];//text广告的内容longTimeLong;//广告的时长charTextFont[32];//文本的字体longFontSize;//字体大小longFontColor;//字体的颜色,RGB值longXPosition;//X坐标longYPosition;//Y坐标longNextADTime;//下一个广告播放的时间间隔}AD_ITEM;不知道如何定义public
解决方案十四:
哪位兄弟帮忙解答一下,不胜感激
解决方案十五:
哪位兄弟帮忙解答一下,不胜感激

时间: 2024-11-05 21:57:08

VB操作VC编写dll的问题的相关文章

vb.net下 编写.DLL的问题

问题描述 我想在VB.NET下编写.DLL之前从未写过.DLL有没有相关的资料希望能介绍一下谢了! 解决方案 解决方案二:写出来的dll只能被.net用,不好用啊解决方案三:我试着简单的写了一个在VB.NET下的DLL命名为A.DLL,写了两个函数,没有参数ImportsSystem.Runtime.InteropServices<ComClass()>PublicClassClassAPublicFunctionFA()Asstring'函数过程EndFunctionPublicFuncti

通过VB结构数组输入数据VC编写DLL实现图形文件

前言 太多的例子讲如何如何实现VC编写动态链接库,VB中声明后使用,但没有一个好的文章来深入探讨这个问题,本文负责解决此类问题. 1.一般情况 VB中定义为: Private Declare Function FuncFoo Lib "MyStDll.DLL" _ (ByVal lParam1 As Long, ByVal lParam2 As Long) As Long VC中定义为: UINT WINAPI FuncFoo(UINT lParam1, UINT lParam2);

如何实现VB和VC的联合调试

我用VC写了一个DLL,然后用VB写EXE.我现在想调试我的DLL和EXE,在VB环境下调试,可是我无法跳入DLL函数的内部,无法在DLL内部调试.有没有一个办法能让我实现VB和VC联调,当我在VB环境中需要跳入DLL函数时,进入VC环境,在VC中调试,这样我就可以查看变量值.设置断点,然后等函数返回时又回到VB环境下继续调试. 后来经过我自己的一番摸索,终于实现了VB.VC联调. 这个方法是以VC为主环境,VB为副环境,这是因为DLL是由VC编写的,而在调试DLL的时候一般会让我们指定一个EX

分享如何在VB中调用VC编写的DLL_vb

一般来说,VB和VC共同编程有3种方式:一种是VC生成DLL,在VB中调用DLL:一种是VC生成ActiveX控件(.ocx),在VB中插入:还有一种是在VC中生成ActiveX Automation服务器,在VB中调用.相对而言,第一种方法对VC编程者的要求最低,但要求你的伙伴进行配合,我推荐这种方法. 先说说VC++的编程.首先在VC++中生成Win32 DLL工程.在这个工程中添加几个函数供VB用户调用.一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一

vb net vfp6 0 dll-如何利用vfp编写一个dll?如何利用vb.net调用这个dll?

问题描述 如何利用vfp编写一个dll?如何利用vb.net调用这个dll? 问题1需要一个vfp写的dll,代码如下:DEFINE CLASS VpfUpdate AS CUSTOM OLEPUBLICFUNCTION VpfUpdate(tableSource AS String, tableTarget as String) as String USE (tableSource) COPY TO (tableTarget) TYPE Fox2x RETURN tableTargetENDF

有关c# 调用vc++编写的非托管DLL、socket编程等相关知识的讲的比较详细的书籍

问题描述 有关c# 调用vc++编写的非托管DLL.socket编程等相关知识的讲的比较详细的书籍 学习c# 调用vc++编写的非托管DLL.socket编程等相关知识的讲的比较详细的书籍都有哪些?(最好是基于VS2008的) 解决方案 c#调用非托管C++生成的dllc# 调用 C++ 非托管 DllC#调用非托管dll 解决方案二: 这样一个知识点,最好是 Baidu/Google 查找来解决 书上的内容,没有网络上的丰富

VB与VC混合编程中处理消息的方法

现在越来越多的人采用VB与VC的混合编程:用VB快速开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,例如内存的操作.IO端口的操作等,VC中还可以嵌入汇编语言进行更底层的操作. 一般的做法是将VC程序编译成DLL,在VB中用Declare语句声明DLL中的函数,例如: Declare Function SendCommand Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\Hr0506dllMnsr.d

VC++动态链接库(DLL)编程深入浅出

  4.2 声明导出函数 DLL中导出函数的声明有两种方式:一种为4.1节例子中给出的在函数声明中加上__declspec(dllexport),这里不再举例说明;另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出.属性及其他方面的信息. 下面的代码演示了怎样同.def文件将函数add声明为DLL导出函数(需在dllTest工程中添加lib.def文件): ; lib.def : 导出DLL函数 LIBRARY dllTest EXPORTS add

VC++动态链接库(DLL)非MFC DLL介绍

  4.1一个简单的DLL 第2节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数. 如图6,在VC++中new一个Win32 Dynamic-Link Library工程dllTest(单击此处下载本工程附件).注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建立的将是第5.6节要讲述的MFC 动态链接库. 图6 建立一个非MFC DLL 在建立的工程中添加lib.h及lib.cpp文件,源