为什么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);
}