我这里有个需要用cdecl方法来呼叫的DLL,但.net中用C#写的方法默认都是stdcall方式。如何在程序中指定用cdecl方式来呼叫呢?
我在网上搜索后发先大多用:
[DllImport("msvcrt.dll",   CharSet=CharSet.Ansi,   CallingConvention=CallingConvention.Cdecl)] 
来处理,但VS 2008 CallingConvention只有CallingConvention.winapi,他只有在Windows CE上才默认用cdecl来呼叫,其他时候用stdcall方式。我怎样才能够在Windows环境中指定用cdecl方式呢?

解决方案 »

  1.   

    2008 只有CallingConvention.winapi?? 这个不可能, CallingConvention.Cdecl是.Net Framework的特性, 2008只是一个IDE, 它不可能屏蔽.Net的功能. 
      

  2.   

    VS2008还存在CallingConvention.Cdecl, 除非LZ的VS2008有问题。以下的代码就是VS2008写出的。
    [DllImport("xxx.dll", EntryPoint = "test",CallingConvention=CallingConvention.Cdecl)]
      

  3.   

    奇怪了,我的代码段是:using System.Runtime.InteropServices;namespace MobileTest {
        public partial class MainForm : Form {
            [DllImport("SSSS.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]但编译会出现:
    错误 1 “System.Runtime.InteropServices.CallingConvention”并不包含“Cdecl”的定义 E:\Windows Mobile\TestCode\MobileTest\MobileTest\MainForm.cs 14 100 MobileTest请大家帮忙看下,谢谢了
      

  4.   

    可能我没说清楚,我开发的是MOBILE程序,环境是.Net Framework 3.5 + Windows Mobile 6 Professional SDK。
    我在Windows开发环境中试过
    DllImport("SSSS.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
    是可以编译通过的,但在Mobile环境中就会出现上面的问题。
      

  5.   

    ft...你设置是的使用.NET Compact Framework 而不是.Net Framework...
      

  6.   

    .NET Compact Framework 是不支持Cdecl的, 既然你做Mobile开发, 那么就设置使用.NET Compact Framework, 用.Net Framework做开发, 却去.NET Compact Framework运行, 自然会出错.  
      

  7.   

    刚开始研究C#以及Mobile,比较无知,呵呵,让大家见笑了。刚才仔细看了下环境是.NET Compact Framework 3.5
    那在.NET Compact Framework 3.5上如何运用Cdecl方式调用DLL方法呢?