读书人

为什么C#调用VC的DLL参数会传递不过去

发布时间: 2012-01-12 22:11:58 作者: rapoo

为什么C#调用VC的DLL参数会传递不过去
我的DLL使用VC6编写,C#可以调用里边的函数。
我的DLL中的函数功能很简单,如下:
int CCEDllTest::MsgBoxInt(int aa)
{
PostMessage(::FindWindow(NULL,_T( "TestMessage ")),WM_USER+10000+1,aa,aa);//发消息给另一个测试窗口,用来判断是否被调用
if (aa==1)
return 1;
else
return 0;
}

C#程序的代码如下:
[DllImport( "cedlltest.dll ")]
public static extern int MsgBoxInt([Out] int aa);
int aa;
aa = 1;
if (MsgBoxInt(aa) == 1)
MessageBox.Show( "ok ");
else
MessageBox.Show( "error ");

这个程序执行是,测试窗口会收到消息,说明DLL函数已经被调用,但是消息的参数返回的不是C#传递过去1,而是系统随机分配的数。

这是为什么,C#的代码在哪块有错误,请大侠们教我。

[解决办法]
"函数是类的成员方法 "
这样你不实例化那个类怎么调用?
貌似你的调用方法有问题吧?把C++的那个改成外部函数,不要和类扯上关系
[解决办法]
不好意思,没仔细看,这是个成员方法呀
你的dll应该是com吧?是的话,可以自己定义一个com interface

{
ComImport,
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
Guid(...),
}

public interface YourInterface
{
[PreserveSig]
public static extern int MsgBoxInt(int aa);
}

读书人网 >C#

热点推荐