gpt4 book ai didi

c# - DllImport 或 LoadLibrary 以获得最佳性能

转载 作者:太空狗 更新时间:2023-10-29 20:58:55 25 4
gpt4 key购买 nike

我有外部 .DLL 文件,里面有快速汇编代码。在此 .DLL 文件中调用函数以获得最佳性能的最佳方式是什么?

最佳答案

你的 DLL 可能是 python 或 c++,不管怎样,按照下面的方式做。

这是您的 C++ DLL 文件。

标题:

extern "C" __declspec(dllexport) int MultiplyByTen(int numberToMultiply);

源代码文件

#include "DynamicDLLToCall.h"

int MultiplyByTen(int numberToMultiply)
{
int returnValue = numberToMultiply * 10;
return returnValue;
}

看看下面的 C# 代码:

static class NativeMethods
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);

[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);

[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);
}

class Program
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate int MultiplyByTen(int numberToMultiply);

static void Main(string[] args)
{
IntPtr pDll = NativeMethods.LoadLibrary(@"PathToYourDll.DLL");
//oh dear, error handling here
//if (pDll == IntPtr.Zero)

IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "MultiplyByTen");
//oh dear, error handling here
//if(pAddressOfFunctionToCall == IntPtr.Zero)

MultiplyByTen multiplyByTen = (MultiplyByTen)Marshal.GetDelegateForFunctionPointer(
pAddressOfFunctionToCall,
typeof(MultiplyByTen));

int theResult = multiplyByTen(10);

bool result = NativeMethods.FreeLibrary(pDll);
//remaining code here

Console.WriteLine(theResult);
}
}

关于c# - DllImport 或 LoadLibrary 以获得最佳性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16518943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com