Visual studio error 127

I am compiling my own plugin for 3dsMax 2018 using Visual Studio 2017. The plugin uses some other DLLs. I used the information here to find out what DLLs were missing or needed updating, and now I'm seeing "Error code 127 - The specified procedure could not be found". Launching from Visual Studio, t...

3ds Max Programming

Welcome to Autodesk’s 3ds Max Forums. Share your knowledge, ask questions, and explore popular 3ds Max SDK, Maxscript and Python topics.


Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.


Showing results for 


Search instead for 

Did you mean: 


  • Back to forum


  • Previous

  • Next

adam.meredithHMHX7

1392 Views, 1 Reply

‎12-03-2018

02:01 AM

Error code 127


I am compiling my own plugin for 3dsMax 2018 using Visual Studio 2017. The plugin uses some other DLLs. I used the information here to find out what DLLs were missing or needed updating, and now I’m seeing «Error code 127 — The specified procedure could not be found». Launching from Visual Studio, the output shows it loading my plugin and the DLLs, then «Exception thrown at 0x00007FF95B0B99B8 (ntdll.dll) in 3dsmax.exe: 0xC0000139: Entry Point Not Found.» After that everything is unloaded.

Is there a way to get more detail on what’s going wrong? I think one of the DLLs is failing to load, but using the Process Monitor doesn’t give any clues.

  • 127
  • dll
  • plugin

  • Back to forum


  • Previous

  • Next

1 REPLY 1

adam.meredithHMHX7

‎12-03-2018

06:05 AM

Recompiling every available DLL seems to have fixed this issue. I’ve got some scripting errors to work through but at least it loads!


  • Back to forum


  • Previous

  • Next

Konstantin Staryhin
2012.04.09 09:04

 

Большая просьба привести простейший пример функции написанной на С# для обращения к ней с мт4 ……….. Передать значения а и б в функцию с шарп и вернуть результат в мт4

в статье https://www.mql5.com/ru/articles/249 компилированная dll автора работает и в мт4 и в мт5 исправно!

но когда я пытаюсь создать свою компилированную DLL с исходников автора (в VisualStudio 2010) то у меня эта dll не работает(пишет ошибка 127)

все версии .NET установлены

// код C#

using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace TEST
{
class TEST
{
[DllExport(«Add», CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
}

namespace RGiesecke.DllExport
{

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
partial class DllExportAttribute : Attribute
{
public DllExportAttribute()
{
}
public DllExportAttribute(string exportName)
: this(exportName, CallingConvention.StdCall)
{
}
public DllExportAttribute(string exportName, CallingConvention callingConvention)
{
ExportName = exportName;
CallingConvention = callingConvention;
}
public CallingConvention CallingConvention { get; set; }
public string ExportName { get; set; }
}
}

// код МТ4
//+——————————————————————+
#import «TEST.dll»
int Add(int a,int b);
#import

void start()
{
Comment(Add(3,2));
}
//+——————————————————————+

В чем ошибка?

  • Обсуждение статьи «Как открыть мир C# из MQL5 путем экспорта неуправляемого кода»
  • Как побороть ошибку Cannot find ‘Add’ in ‘Test1.dll’ ?
  • Создание собственного расширения MetaTrader (dll)

Konstantin Staryhin

2012.04.11 11:23

#2  

кто знает куда и как вставляются шаблоны в с шарпе, причина видимо только в этом

и как шаблон задействовать

<VSTemplate Version=»3.0.0″ xmlns=»http://schemas.microsoft.com/developer/vstemplate/2005″ Type=»Project»>
<TemplateData>
<Name>Testme</Name>
<Description>&lt;No description available&gt;</Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>Testme</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
<TemplateContent>
<Project TargetFileName=»Testme.csproj» File=»Testme.csproj» ReplaceParameters=»true»>
<Folder Name=»DllExport» TargetFolderName=»DllExport»>
<ProjectItem ReplaceParameters=»true» TargetFileName=»DllExportAttribute.cs»>DllExportAttribute.cs</ProjectItem>
</Folder>
<Folder Name=»Properties» TargetFolderName=»Properties»>
<ProjectItem ReplaceParameters=»true» TargetFileName=»AssemblyInfo.cs»>AssemblyInfo.cs</ProjectItem>
</Folder>
<ProjectItem ReplaceParameters=»true» TargetFileName=»UnmanagedExports.cs»>UnmanagedExports.cs</ProjectItem>
</Project>
</TemplateContent>
</VSTemplate>

Konstantin Staryhin

2012.04.12 05:23

#3  

нашел решение подробно описанное http://habrahabr.ru/post/137300/

пишем классик с нужными функциями. далее его вскрываем и подправляем код IL. и опять компилируем.

полученная длл должна по идее работать но увы

опять выдает ошибку 127.

2012.04.12 05:30

#4  

Количество ответов от других участников по теме показывает насколько распространен C# среди них.

Походу вы единственный, кто им занимается на форуме.

Назначаем вас C# гуру форума :)

PS.

На 127 ошибку обычно в проекте С++ не хватает def файла.
Если в C# есть такой похожий файл, то найдите и добавьте в него список функций. по аналогии.

Konstantin Staryhin

2012.04.12 05:43

#5  

panelektrik:

кто знает куда и как вставляются шаблоны в с шарпе, причина видимо только в этом

и как шаблон задействовать

разобрался в шаблонах, шаблон необходимо вставить в папку C:Documents and SettingsAdminМои документыVisual Studio 2010TemplatesProjectTemplates, после этого при создании нового проекта появляется возможность его прменения. но увы многочисленные попытки не дали результата. всегда компилированная длл выдает ошибку 127

Konstantin Staryhin

2012.04.12 05:47

#6  

sergeev:

Количество ответов от других участников по теме показывает насколько распространен C# среди них.

Походу вы единственный, кто им занимается на форуме.

Назначаем вас C# гуру форума :)

PS.

На 127 ошибку обычно в проекте С++ не хватает def файла.
Если в C# есть такой похожий файл, то найдите и добавьте в него список функций. по аналогии.

спасибо за ответ. думаю эта тема полезна программистам! просто те программисты которые используют еще и C# редко заходят на форум

кстати язык с шарп очень схож с mql, если решить проблему связки длл с мт4(простая и подробная инструкция) то думаю многие смогут зашивать свои алгоритмы в dll на с шарпе.

Андрей

2012.04.12 05:47

#7  

Да напишите вы эту сумму на С++.
Быстрее результат будет.

2012.04.12 06:00

#8  

panelektrik:

спасибо за ответ. думаю эта тема полезна программистам! просто те программисты которые используют еще и C# редко заходят на форум

похоже таковых — только вы и еще MetaDriver.

кстати язык с шарп очень схож с mql, если решить проблему связки длл с мт4(простая и подробная инструкция) то думаю многие смогут зашивать свои алгоритмы в dll на с шарпе.

неверной дорогой идете товарищи. Добрый совет — учить С++.

так как вы вскоре перейдете на MQL5, а он родимый не на С#, а на C++ идет.

Не теряйте время.

[Удален]

2012.04.12 08:53

#9  

sergeev:

похоже таковых — только вы и еще MetaDriver.

неверной дорогой идете товарищи. Добрый совет — учить С++.

так как вы вскоре перейдете на MQL5, а он родимый не на С#, а на C++ идет.

Не теряйте время.

Шарп нынче в моде.

Друг кури http://pitforex.com/index.php?topic=916.0 тут все пошагово расписано, а хабровский и у меня 127 показывает

tasik

0 / 0 / 0

Регистрация: 27.12.2012

Сообщений: 52

1

05.05.2015, 09:51. Показов 4643. Ответов 4

Метки нет (Все метки)


dll

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <vcl.h>
#include <windows.h>
#include <fstream>
#pragma hdrstop
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
//---------------------------------------------------------------------------
 __declspec(dllexport) LRESULT CALLBACK HookProc(int iCode, WPARAM wParam, LPARAM lParam)
{// Если использовать это функцию для WH_GETMESSAGE, то что бы вы не нажимали будет писАться 'a' :-)
// iCode - сообщает хук-функции о том, что делать с данными
        std::ofstream f("test.log",std::ios::app);
    if(iCode>=0) // Если iCode>=0, то данные нужно обработать
    {
        MSG *msg = (MSG*)lParam; // Сообщение, получаемое некоторым окном
        ShowMessage("Pressed key");
        if(msg->message == WM_CHAR) // Если сообщение WM_CHAR, т.е. юзверь нажал кнопку на клавиатуре,
        {   //f <<   msg->wParam << std::endl;
            ShowMessage(msg->message);
            msg->wParam = (WPARAM)'a'; // то заменим введенный символ на 'a'
            
        }
    }
    else // Если iCode
        return CallNextHookEx(NULL, iCode, wParam, lParam);
 
    return 0;
}

и код где вызывается

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
HINSTANCE hHookDll = LoadLibrary("Project1.dll");
 
int SetHook(BOOL bSet) // Ôóíêöèÿ óñòàíàâëèâàåò/ñíèìàåò õóê â çàâèñèìîñòè îò bSet
{
    HHOOK hHook;    
    if(bSet) // Åñëè óñòàíàâëèâàåì
    {
        if(hHookDll) // Åñëè çàãðóæåíà áèáëèîòåêà
        {
            HOOKPROC hpHookProc = (HOOKPROC)GetProcAddress((HINSTANCE)hHookDll, "_HookProc@12"); // Ïîëó÷èì àäðåñ õóê-ôóíêöèè
 
            if(hpHookProc) // Åñëè óñïåøíî ïîëó÷åí àäðåñ ô-öèè,
            {
                // òî óñòàíîâèì õóê
                HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, // òèï õóêà
                        (HOOKPROC)hpHookProc, // õóê-ôóíêöèÿ
                        hHookDll, // õåíäë áèáëèîòåêè ñ õóê-ôóíêöèåé
                        NULL);
 
                if(hHook == NULL) // Åñëè õóê íå óñòàíîâèëñÿ, âåðíåì îøèáêó
                    return 3;
            }
            else{
            ShowMessage(GetLastError());
               return 1;
            }
                
        }
        else
            return 2;
    }
    else // Åñëè ñíèìàåì õóê
        UnhookWindowsHookEx(hHook);
 
    return 0;
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Ушел с форума

Эксперт С++

16454 / 7418 / 1186

Регистрация: 02.05.2013

Сообщений: 11,617

Записей в блоге: 1

05.05.2015, 10:07

2

В LoadLibrary пишите полный путь к dll.
И вообще ее лучше из глобального контекста не вызывать,
легко можно нарваться на дедлок или еще что-нибудь.

Добавлено через 2 минуты
А между прочим, 127 — это «не найдена указанная процедура».
Уверены, что функция «_HookProc@12» действительно есть в dll ?



0



0 / 0 / 0

Регистрация: 27.12.2012

Сообщений: 52

05.05.2015, 10:35

 [ТС]

3

dll грузит, ошибка при вызове функции __declspec(dllexport) LRESULT CALLBACK HookProc(int iCode, WPARAM wParam, LPARAM lParam), не могу получить адрес HOOKPROC hpHookProc = (HOOKPROC)GetProcAddress((HINSTANCE)hHookDll, «HookProc»), может я не правильно вызываю или создал в библиотеке функцию



0



Убежденный

Ушел с форума

Эксперт С++

16454 / 7418 / 1186

Регистрация: 02.05.2013

Сообщений: 11,617

Записей в блоге: 1

05.05.2015, 11:29

4

Воспользуйтесь утилитой dumpbin (есть в Windows SDK / Visual Studio),
запускать из Visual Studio Command Prompt примерно так:

Bash
1
dumpbin.exe /all /rawdata:none "путь-к-dll" >> "файл-куда-записать-инфу"

Далее ищите в полученном файле информацию об именах экспортируемых функций.
Уверен, что там вместо «_HookProc@12» совсем другое имя.

Цитата
Сообщение от tasik
Посмотреть сообщение

C++
1
__declspec(dllexport) LRESULT CALLBACK HookProc(int iCode, WPARAM wParam, LPARAM lParam)

Так еще попробуйте:

C++
1
extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int iCode, WPARAM wParam, LPARAM lParam)



1



0 / 0 / 0

Регистрация: 27.12.2012

Сообщений: 52

05.05.2015, 12:29

 [ТС]

5

Спасибо Убежденный за помощь!
Подключил функцию, открыл с помощью Dependency walker и получил реальное название функции, вылезли новые баги но это уже такое.



0



Понравилась статья? Поделить с друзьями:
  • Vimeworld ошибка при загрузке файлов
  • Visual studio debug error
  • Vimeworld ошибка 37 что делать
  • Visual studio code как изменить язык программирования
  • Vimeworld критическая ошибка рабочий путь лаунчера неверен