标签: dllimport

加载32位DLL时BadImageFormatException,目标是x86

我有一个DLL(FreeType)肯定是32位(标题:IMAGE_FILE_MACHINE_I386).

我想使用DllImport从C#代码中使用它.

我的应用程序的目标是x86,IntPtr.Size是4,进程是32位.

但我得到BadImageFormatException(HRESULT的异常:0x8007000B).有什么不对?

当然我使用的是64位Windows 7.

c# dll dllimport 32bit-64bit badimageformatexception

33
推荐指数
4
解决办法
6万
查看次数

卸载使用DllImport加载的DLL

如何卸载已DllImport在C#中加载的DLL ?

c# dllimport

31
推荐指数
3
解决办法
2万
查看次数

从DLL调用函数?

我是C#的新手,我正在努力学习使用DLL.我正在尝试将我的对象包装在DLL中,然后在我的程序中使用它.

public class Foo   // its in the DLL
{
   public int ID;
   public void Bar()
   {
      SomeMethodInMyProgram();
   } 
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试将其打包到DLL但我不能,因为编译器不知道SomeMethodInMyProgram()是什么.

我想用它像:

class Program // my program, using DLL
{
    static void Main(string[] args)
    {
       Foo test = new Foo();
       test.Bar();
    }
 } 
Run Code Online (Sandbox Code Playgroud)

c# dll interop call dllimport

27
推荐指数
4
解决办法
8万
查看次数

在Win32/COM方法上调用PInvoke时,通常会有明显的性能损失吗?

我想知道是否有人对管理.Net代码在Win32方法上使用DLLImport/PInvoke的负面影响有一个不错的解释或概述?

我计划使用各种Win32方法,并希望对这样做的负面影响有更深入的了解.

谢谢,

布莱恩.

.net performance pinvoke marshalling dllimport

26
推荐指数
1
解决办法
5865
查看次数

如何在VB.NET中使用<DllImport>?

我应该如何DLLImport在VB.NET中的东西?一个例子是:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer

End Function
Run Code Online (Sandbox Code Playgroud)

如果我把它放在一个类或其他地方,我得到"DLLimport未定义"我使用的是Visual Studio 2008 Professional

vb.net dllimport

25
推荐指数
4
解决办法
10万
查看次数

在MSVC中链接错误LNK2019,带有__imp__前缀的未解析符号,但应该来自静态lib

我正在尝试将MSVC中的问题与我为g ++编写的项目联系起来.这是问题所在:

我将libssh构建为静态库作为我的应用程序的一部分,在cmake中添加目标

add_library(ssh_static STATIC $ libssh_SRCS)

Libssh在C中,所以我有'extern'C"{...}'将包含在我的c ++源代码中.然后我将ssh_static目标链接到我的可执行文件sshconnectiontest

target_link_libraries(sshconnectiontest ... ssh_static ...)

这一切都适用于linux和gcc,但现在在MSVC中我得到了

error LNK2019: unresolved external symbol __imp__[function names here] referenced in [filename]
Run Code Online (Sandbox Code Playgroud)

对于我使用的每个libssh函数.

任何想法都出错了?我已经读过某个地方,imp前缀意味着链接器期望链接.dll,但这不应该是这种情况,因为ssh_static在add_library调用中被声明为静态库...

cmake dllimport lnk2019 visual-c++ imp

25
推荐指数
2
解决办法
5万
查看次数

使用DataExplorer.exe连接到本地DBX4驱动程序时遇到错误

我在Delphi 2010 for Firebird数据库中编写了自己的DBX 4.驱动程序是一个dynalink驱动程序,它可以与TSQLConnection一起使用.

最近,我尝试使用Delphi 2010发布的DataExplorer.exe并遇到错误:

"Attempted to read or write protected memory.
 This is often an indication that other memory is corrupt".
Run Code Online (Sandbox Code Playgroud)

跟踪源代码后,我发现以下导出方法可能是导致问题的原因:

function DBXLoader_GetDriver(Count: TInt32; Names, Values: TWideStringArray;
  ErrorMessage: TDBXWideStringBuilder; out pDriver: TDBXDriverHandle):
  TDBXErrorCode; stdcall;
Run Code Online (Sandbox Code Playgroud)

调试此方法时,"名称和值"参数包含损坏的值.我不知道是什么原因造成的.也许DataExplorer.exe存在一些内存管理器问题(.net问题?)

经过一些试验和错误后,我尝试将方法更改为:

type
  TWideStringArray2 = array of PChar;

function DBXLoader_GetDriver(Count: TInt32; Names, Values: TWideStringArray2;
  ErrorMessage: TDBXWideStringBuilder; out pDriver: TDBXDriverHandle):
  TDBXErrorCode; stdcall;
Run Code Online (Sandbox Code Playgroud)

这一次,错误消失了,在退出此方法后不久,同样的错误再次引发

"Attempted to read or write protected memory.
This is often an indication that other memory is corrupt".
Run Code Online (Sandbox Code Playgroud)

你有什么想法可能导致问题的原因吗?

delphi dllimport

23
推荐指数
1
解决办法
663
查看次数

阅读注册表项

我有一个Web应用程序,它从bin文件夹导入DLL.

const string dllpath = "Utility.dll";

    [DllImport(dllpath)]
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是首先从不在当前项目中但在某个不同位置的文件夹中导入DLL.

该文件夹的路径存储在注册表项中.

我该怎么做?

编辑:

为什么我不能解决这个问题?

public partial class Reports1 : System.Web.UI.Page
{

    RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software\xyz");
    string pathName = (string)registryKey.GetValue("BinDir");

    const string dllpath = pathName;
    [DllImport(dllpath)]
    public static extern bool GetErrorString(uint lookupCode, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder buf, uint bufSize);

    protected void Page_Load(object sender, EventArgs e)
    {
Run Code Online (Sandbox Code Playgroud)

string pathName = (string)registryKey.GetValue("BinDir"); 是不是在这里工作,但正在页面加载事件...

但是,如果我这样做DLL导入将无法正常工作......我该如何解决这个问题?

c# asp.net registry dllimport visual-studio

22
推荐指数
3
解决办法
7万
查看次数

"无法在dll中找到名为[function]的入口点"(c ++到c#类型转换)

我有一个来自第三方的dll,它是用C++编写的.以下是来自dll文档的一些信息:

//start documentation

RECO_DATA{
wchar_t Surname[200];
wchar_t Firstname[200];
}
Run Code Online (Sandbox Code Playgroud)

描述:用于接收功能结果的数据结构.所有功能结果将存储为Unicode(UTF-8).

方法:

bool recoCHN_P_Name(char *imgPath,RECO_DATA *o_data);
Run Code Online (Sandbox Code Playgroud)

输入:

char * imgPath
Run Code Online (Sandbox Code Playgroud)

此功能识别的图像位置的完整路径

RECO_DATA * o_data
Run Code Online (Sandbox Code Playgroud)

用于接收功能结果的数据对象.函数返回:如果成功则返回true,否则返回false.

//end documentation
Run Code Online (Sandbox Code Playgroud)

我试图从我的C#应用​​程序调用recoCHN_P_Name.为此,我想出了这段代码:

导入dll的代码:

    public class cnOCRsdk
{
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct RECO_DATA{
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=200)]
        public string FirstName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
        public string Surname;
        }

    [DllImport(@"cnOCRsdk.dll", EntryPoint="recoCHN_P_Name")]
    public static extern bool recoCHN_P_Name(byte[] imgPath, RECO_DATA o_data);
}
Run Code Online (Sandbox Code Playgroud)

调用函数的代码:

            cnOCRsdk.RECO_DATA recoData = new cnOCRsdk.RECO_DATA();

        string path = @"C:\WINDOWS\twain_32\twainrgb.bmp";

        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        byte[] bytes …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll dllimport extern

21
推荐指数
4
解决办法
6万
查看次数

如何使用DLLImport将字符串从C#传递到C++(以及从C++传递到C#)?

我一直在尝试向C++发送一个字符串到/从C++发送一个字符串很长一段时间但是没有设法让它工作呢......

所以我的问题很简单:
有没有人知道将字符串从C#发送到C++以及从C++发送到C#的方法?
(一些示例代码会有帮助)

c# c++ string dllimport

20
推荐指数
2
解决办法
3万
查看次数