c#今天遇到一个非常奇怪的有关问题,小弟我原来传两个参数给dll,后来dll源码改成3个参数用c#传到的参赛如何传都不对

c#今天遇到一个非常奇怪的问题,我原来传两个参数给dll,后来dll源码改成3个参数用c#传到的参赛怎么传都不对
[DllImport("JsdDecoder.dll",CallingConvention=CallingConvention.Cdecl)]
       public static extern long JsdDtClose(long m_Login, long m_RealHand, int nDeviceType);


long lLogID = 1;
        long lPlayHandle = 2; 
private void btnStop_Click(object sender, EventArgs e)
        {
            JsdDecoder.JsdDtClose((long)lLogID, (long)lPlayHandle, 3);
        }

上面传到下面来就不正确了,上面的第一个是下面的第一个,下面的第二个是0,上面的第二个是下面的第3个,上面的3不知道跑哪去了,编译都能通过
extern "C"  _declspec(dllexport) long JsdDtClose(long m_Login,long m_RealHand,int nDeviceType )
{
char sUrl[256];
switch(nDeviceType)
{}

注释下面的编译就通不过
extern "C"  _declspec(dllexport) long JsdDtClose(long m_Login,long m_RealHand,int nDeviceType );

求解,哪里出问题了,我只是多加了参数就这样了
------解决方案--------------------
C++ 里面的 long 参数,在 C# 里面是 int.