मैं एक सी # DLL (MyTestDll) का निर्माण किया है NuGet पैकेज UnmanagedExports का उपयोग कर:लोड हो रहा है सी # DLL
path = "C:\\Temp\\Test"
os.chdir(path)
dll = ctypes.WinDLL("MyTestDll.dll")
f = dll.Test
f.restype = ctypes.c_char_p
print f('qqq')
:
[DllExport("Test", CallingConvention = CallingConvention.Cdecl)]
public static string Test(string name)
{
return "hi " + name + "!";
}
मैं ctypes DLL आयात के माध्यम से अजगर से इसका इस्तेमाल करते हैं
यह सिर्फ एक कल्पना है, यह काम करता है।
namespace NoSenseDll
{
public class NoSenseClass
{
public static int Sum(int a, int b)
{
return a + b;
}
}
}
मैं MyTestDll लागू करने के लिए इस NoSenseDll उपयोग शुरू कर दिया:
फिर, मैं एक और DLL (NoSenseDll) जोड़ा
[DllExport("Test", CallingConvention = CallingConvention.Cdecl)]
public static string Test(string name)
{
return NoSenseDll.NoSenseClass.Sum(4, 5).ToString();
}
दुर्भाग्य से, यह काम नहीं करता। अजगर का कहना है:
WindowsError: [Error -532462766] Windows Error 0xE043435
मैं रास्ते पर C:\\Temp\\Test
जोड़ने की कोशिश की है, लेकिन है कि मदद नहीं की।
मैं एक सी ++ परीक्षण लिखा है:
#include "stdafx.h"
#include "windows.h"
#include <iostream>
#include <string>
#include "WinBase.h"
typedef char*(__stdcall *f_funci)(const char*);
int _tmain(int argc, _TCHAR* argv[])
{
int t;
std::string s = "C:\\Temp\\Test\\MyTestDll.dll";
HINSTANCE hGetProcIDDLL = LoadLibrary(std::wstring(s.begin(), s.end()).c_str());
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "Test");
std::cout << "funci() returned " << funci(std::string("qqq").c_str()) << std::endl;
std::cin >> t;
return EXIT_SUCCESS;
}
यह काम करता है, तो दूसरा DLL (NoSenseDll) सी ++ निष्पादन को उसी फ़ोल्डर में है। यह काम नहीं करता है अगर मैं सिर्फ पैथ में NoSenseDll फ़ोल्डर जोड़ता हूं।
* मैंने पथ में 'सी: \\ टेम्प \\ टेस्ट' जोड़ने की कोशिश की है, लेकिन इससे मदद नहीं मिली। * क्या आपने वास्तव में डबल बैकस्लैश का उपयोग किया था? शायद यह समस्या हो सकती है। सिर्फ अनुमान। – Palec
मैंने आपके क्यू एंड ए को अधिक आसानी से समझने के लिए संपादित करने के लिए अपनी पूरी कोशिश की, और मैंने नोसेन * सी * ईडीएल को नोसेन * एस * ईडीएल में तय किया। इस क्यू एंड ए में किए गए प्रयासों के लिए धन्यवाद! – Palec