刚碰到个问题,我的一个项目中引用了一个dll,这个dll又引用了另一个dll,我把这俩个都放在bin文件夹下,但是会报错,说第二个dll找不到。把它放到系统文件夹system32下就没事了。
但是遇到一个奇怪的问题,我的各部分代码是只有的:
Text.c
int plus(int a,int b)
{
return a+b;
}
char *cplus(char *a,char **b)
{
sprintf(*b,"%s",a);
int f=1+1;
return a;
}
Text.h
TEXT_API int plus(int a,int b);
TEXT_API char *cplus(char *a,char **b);
_Text.cs
public class Class1
{
[DllImport("text.dll", EntryPoint = "plus", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int qplus(int a, int b);
[DllImport("text.dll", EntryPoint = "cplus", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern string cplus(string a, ref string b);
}
Index.cs
private void button1_Click(object sender, EventArgs e)
{
int tem = Class1.qplus(1, 2);
string a = "111";
MessageBox.Show(tem.ToString());
}
private void button2_Click(object sender, EventArgs e)
{
string a = "111";
string b = "";
string c=Class1.cplus(a,ref b);
MessageBox.Show(b);
MessageBox.Show(c);
}
当然这样是没有问题的,但是当c语言部分返回*b的时候,在最后的Index中调用cplus函数的返回值就会有问题。个人表示很不解,目前也不知是何原因,先放在这里吧。如果有哪位大神看到了还请赐教。