日期:2014-05-19  浏览次数:20698 次

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