【问题标题】:Dll methods are not invoked on windows server 2008Windows Server 2008 上不调用 Dll 方法
【发布时间】:2012-10-31 14:53:48
【问题描述】:

我正在尝试从 ASP.net 网络调用 dll 方法。它在 W2003 服务器上运行,但相同的 dll 和相同的 web 在带有 IIS 7.5 的 w2008 服务器 R2 上崩溃。我这样做是为了导入 dll:

<DllImport("Cripto.dll")> _
        Public Shared Function DesCipher(ByVal uiMode As Integer, ByVal uiLength As        Integer, ByVal szSourceData As String) As String

End Function

我尝试了 64 位 dll 编译,但问题仍然存在。

我要疯了……

请帮忙!

【问题讨论】:

  • 你看到什么样的崩溃?
  • 这是一个线程中止崩溃。现在我创建了一个新的空方法 dll,但它仍然无法正常工作。当我调用公共方法时,网络会引发受控异常,因为它丢失了所有会话变量¿?¿?¿
  • 新方法的签名(参数计数、参数类型、返回类型)是否与此方法相同?
  • 这是 dll 方法:
    extern "C" { __declspec(dllexport) char* DesCifrar() { return ("Hello from DLL !\n");这是网络调用: _ Public Shared Function DesCifrar() As String End Function 。我认为一切都很好,不是吗?
  • 由于 VB 认为是 Unicode,并且 C/C++ char 值不是 Unicode,因此您应该使用 &lt;DllImport("DLL_SGRI.dll", CharSet:=CharSet.Ansi, ExactSpelling:=True)&gt;。否则,运行时会认为返回的指针是指向宽字符的指针。

标签: vb.net dll iis-7.5 windows-server-2008 windows-server-2003


【解决方案1】:

我终于找到了线索。 这是一个内存位置问题。主函数返回一个像这样的数组: char retorno[10000];

函数在 dll 代码中被声明为“char*”

通过更改这些行:

     ULONG  ulSize = strlen((char*)retorno) + sizeof(char);
     char*  pszReturn = NULL;
     pszReturn = (char*)::GlobalAlloc(GMEM_FIXED, ulSize);
     strcpy(pszReturn, (char*)retorno);
     return pszReturn;

而不是 返回 ((char *)retorno)

现在它正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2018-07-05
    • 2023-04-10
    • 2012-03-12
    • 2011-01-23
    • 1970-01-01
    • 2013-02-14
    相关资源
    最近更新 更多