VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3013|回复: 11

调用vc++写的dll的问题

[复制链接]

1

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-3-12 14:30:01 | 显示全部楼层 |阅读模式
调用过程出出现declare DLL call caused an exception错误
不知道哪位能帮解决一下?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-6-7 12:00:02 | 显示全部楼层
应该是调用参数有问题
回复

使用道具 举报

1

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-6-9 00:45:01 | 显示全部楼层
查了很多东西
大概结论就是参数有问题
C++需要参数是一个1025位String
这个东西我是存储在表中meno类型字段中,取出之后用type()查看类型是U
不知道是不是这个原因
回复

使用道具 举报

0

主题

18

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
发表于 2020-6-9 07:45:01 | 显示全部楼层
或者是Dll写的本身有问题.或者是声明错误的问题.

回复

使用道具 举报

1

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-6-12 03:45:01 | 显示全部楼层
声明没有报错
那还有没有问题
声明语句是这样的
declare method in ***.dll string arg
帮忙看看有没有问题
谢谢各位
回复

使用道具 举报

0

主题

18

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
发表于 2020-6-13 15:15:02 | 显示全部楼层
声明是不会报错的.你怎么声明,调用的时候就怎么调用.

就现在这种状况,你让各位帮忙看什么?

什么都不知道,就知道出错了.各位就猜吧.

你把整个声明完整写出来,C++的DLL是不是你写的.如果不是,

该Function 是要做什么? 这些都搞不清楚,肯定出错.

回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-6-14 13:30:02 | 显示全部楼层
有可能数据类型你没有写好
回复

使用道具 举报

1

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-6-15 00:30:01 | 显示全部楼层
c++是一个解密过程
就是将传入的参数进行解密后返回
需要参数上边已经说了
是一个长度1025的字符串
字符串保存在memo字段中
读出以后传给方法
语句是: = method(string)

声明是declare string method in ***.dll string arg

不知道这样说清楚了没有~

呵呵!~谢谢!!
回复

使用道具 举报

1

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-6-15 17:15:02 | 显示全部楼层
to ellery

我也怀疑数据类型有问题
保存在memo类型字段中的数据取出给变量后
用type()查看类型是U啊
但是怎么能给转成C呢?
另外我有另外一个vc++的dll需要参数是string类型的一个路径
这个路径是通过getfile()获取的
用type()查看类型也是U,调用的时候就没有问题
弄得我这个晕啊~~

PS:不是很经常上来看,不过这里热心人还是很多的。
回复

使用道具 举报

0

主题

18

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
发表于 2020-7-11 15:15:01 | 显示全部楼层
先说一下参数传递的状况.其实所有的参数传递过去的时候,DLL是不管
你的,它只是根据它自己的声明来取你的参数,因此,根据你后来的描述
你只是用来加解密,如此,根本不用调用此DLL,VFP里有的是.若你一定要
调用,更改你的声明:

   declare Integer method in ***.dll string arg @

返回数值不可能是字符串,所以你不必指望Declare String ,没这回事.
只能Declare Integer ,其次,String arg传递下去的字符串是要进行解
密的,所有传递它的地址,以便DLL可以将解密后的字符串写入该Dll中,因此
要加 @ ,没有原DLL的说明,只能估计.检测一下返回值,并看看是否arg已经
进行了解密.

   调用的时候
   Store "fgdsafdsafas" To arg
   ?Method(@arg)
   ?arg

   如果你对该Dll的声明根本不熟,也不清楚,放弃吧.加密解密的东西太多了.
犯不着用这个.




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表