最近忙于毕业论文的实验,主要用VS2010+openCV做图像处理,做了大量工作,遇到无数的问题。
首先就先说说今天遇到的问题吧:我想利用VB中读取的图像路径传入VC++,之前有的办法一直是将VB的字符串tempPath转换成Byte数组之后传入C++。如:
Dim sbyt() As Byte
ReDim sbyt(tempPath.Length - 1)
Dim sl() As Byte
sl = System.Text.Encoding.Default.GetBytes(tempPath)
For i As Integer = 0 To tempPath.Length - 1
sbyt(i) = sl(i)
Next
但是想实现一种直接传入的手段。
google……
发现VC++中接口参数可以是void tt(char *s)。于是乎写好该DLL。在VB中Public Declare Function tt Lib "*****.dll" (ByVal s As String)。结果报错,大意是无法返回参数。再google……最后终于在一篇english里面发现,原来我在VC++中定义的函数是void类型,没有返回值,但是我在VB中声明是用了function,所以改成sub!!
……
还是报错:无法在我指定的DLL中找到名为tt的函数入口点。
google……漫长时间地……
终于在http://www.newsmth.net/bbsanc.php?path=%2Fgroups%2Fcomp.faq%2FVisualBasic%2FCatalog%2F5%2FM.963616351.A里发现VC++允许不编写.def文件,而是在函数定义前加_declspec(dllexport)修饰符,这样的函数也可以被外部程序调用。
更新的错误出现:__declspec(dllexport) cannot be applied to a function with the __clrcall
calling convention。。。。。。。。